I am not sure what to title this but the gist is that I have two structs
with a one way dependency:

// Vector3 type
typedef struct Vector3 {
    float x;
    float y;
    float z;
} Vector3;

// Ray type (useful for raycast)
typedef struct Ray {
    Vector3 position;       // Ray position (origin)
    Vector3 direction;      // Ray direction
} Ray;


I've gone ahead and made a test extension here:
https://github.com/joseph-montanez/php-ext-reference-issue . I've made each
struct a PHP object. allowing me to do this:

<?php
$position = new \skeleton\Vector3(1,2,3);
$direction = new \skeleton\Vector3(4,5,6);

$ray = new \skeleton\Ray($position, $direction);

echo 'Z: ', $ray->position->z, PHP_EOL; // Outputs: 3

$position->z = 9;

echo 'Z: ', $ray->position->z, PHP_EOL; // Outputs: 9

The PHP Ray object is defined as so:
typedef struct _skeleton_ray_object {
    Ray ray;
    HashTable *prop_handler;
    zend_object std;

    skeleton_vector3_object *position;
    skeleton_vector3_object *direction;
} skeleton_ray_object;

When I update either vector3 object, I don't have a way to propagate the
changes back to the parent object(Ray). This means the raw Ray struct is
never updated. Is there a built-in way to handle propagation (listeners) in
a PHP extension or will I need to hand roll this?


Thanks,
Joseph Montanez

Reply via email to