Hello.

I have managed porting my Zend1 objects to the new object structure and I have 
some ideas or doubts I want to share:

Properties
-----------

The "add_property_*" function pool updates zval->value->obj->properties 
(Z_OBJPROP_P), while now the correct HastTable to update is in 
Z_OBJ_P(zval)->properties.
So I created a new set of functions (temporarily) named "add_objprop_*" that 
updates the right HashTable, and I created a macro 

        #define add_property add_objprop

in case ZEND_ENGINE_2 should be defined inside my files.

It seems to work fine.

What will be the policy for properties in the future? Will be a separate set 
of functions for the new object or will the "add_property_*" set be modified?

Constructor
-------------

Furthermore, my object had no costructor with the new model and there seems 
not to be an API function to assign constructors. I used this little 
function:

ZEND_API int set_constructor(zend_class_entry ** class_entry, char * 
constructor_name) {
    /*
     *  I use a zend_op_array because
     *  I cannot figure out how to populate a (zend_function *)
     *  otherwise ...
     */
    zend_op_array * func_method;

    if (zend_hash_find(
        &(*class_entry)->function_table,
        constructor_name,
        strlen(constructor_name) + 1,
        (void **) &func_method) == FAILURE) {
        return FAILURE;
    }

    (*class_entry)->constructor = (zend_function *) func_method;
    return SUCCESS;
}

and this function should be called from the MINIT function this way:

    // an_object
    INIT_OVERLOADED_CLASS_ENTRY
        (ce,
         "an_object",
         php_an_object_class_functions,
         NULL, NULL, NULL);
    an_object_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL 
TSRMLS_CC);
#ifdef ZEND_ENGINE_2
    set_constructor(&an_object_class_entry, "scobject");
#endif

Constructor return value
---------------------------

I used before a this syntax to return value from constructors.

SEPARATE_ZVAL(&zval); \
*return_value = *zval; \
FREE_ZVAL(zval);

now I have noticed I should use this:

*return_value = *zval;
zval_copy_ctor(return_value);

I have some more function for dealing with objects. If someone is interested I 
cand send it outside the list.

Regards,
        Stefano

--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to