Hello, I am running into an issue with tracking PHP Objects in an internal object. In PHP only code if you override a variable passed into an object, the origin passed value should remain the same if the variable is changed outside of it.
$position = new Vector3(4.0, 2.0, 4.0); $camera = new Camera3D($position); $position = 3; //-- Reassign the position to a new type //-- Now the original value passed is modified, but the value in camera should not be changed var_dump( $camera->position->x, //expected: 4, actual: 1.2621135907985048E-34 $camera->position->y, //expected: 2, actual: 1.401298464324817E-45 $camera->position->z //expected: 4, actual: 4 ); In C I am tracking the Objects by their own structs: typedef struct _php_raylib_camera3d_object { Camera3D camera3d; HashTable *prop_handler; php_raylib_vector3_object *position; php_raylib_vector3_object *target; php_raylib_vector3_object *up; zend_object std; } php_raylib_camera3d_object; Position Getter static zend_object * php_raylib_camera3d_get_position(php_raylib_camera3d_object *obj) /* {{{ */ { GC_ADDREF(&obj->position->std); return &obj->position->std; } /* }}} */ Position Setter static int php_raylib_camera3d_set_position(php_raylib_camera3d_object *obj, zval *newval) /* {{{ */ { int ret = SUCCESS; if (Z_TYPE_P(newval) == IS_NULL) { // Cannot set this to null... return ret; } php_raylib_vector3_object *phpPosition = Z_VECTOR3_OBJ_P(newval); GC_ADDREF(&phpPosition->std); GC_DELREF(&obj->position->std); obj->position = phpPosition; return ret; } /* }}} */ They are registered as a property i.e: php_raylib_camera3d_register_prop_handler(&php_raylib_camera3d_prop_handlers, "position", php_raylib_camera3d_get_position, php_raylib_camera3d_set_position, NULL, NULL, NULL, NULL); I also tried switching to tracking zend_object as well but it's the same problem. Should I be tracking other php objects as a zval instead? Thanks, Joseph Montanez -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php