Hello Stanislav, do you remember any reason why we have the current layout with the zval pointing to a handler and that having a function which returns a pointer to the class_entry as well as a function that returns the name?
struct _zend_object_handlers { [...] zend_object_get_class_entry_t get_class_entry; zend_object_get_class_name_t get_class_name; typedef struct _zend_object_value { zend_object_handle handle; zend_object_handlers *handlers; } zend_object_value; And wouldn't it be faster to drop both handlers from the table and instead have zend_object_value have a pointer to zend_class_entry and that a pounter to the handler table? best regards marcus Sunday, June 4, 2006, 5:42:02 PM, you wrote: AG>>>We should probably make this a requirement and I don't know of one AG>>>today that doesn't have an associated class name. I believe some parts AG>>>of PHP might blow up if this isn't supported. > There are parts that can blow up if get_class_name is NULL or returns NULL > (though good practice would be to filter such places out but I'm not sure > it was ever accomplished) - however it doesn't have to be NULL to be a > problem. Imagine two extensions that bridge external objects - e.g., Java > and .Net one - that attempt to return real class of an object, but if it > doesn't succeed (e.g., internal reflection doesn't work for some reason) > they return "???" instead. It's not that good, but we can't catch it and > we can't even put up a requirement out saying "your 'don't know' value > should be different from other's" - how's one supposed to know what > other's value is? And if you don't do something very unrelated would break > in very strange ways - so it's be quite hard even point to what is the > cause. > So in fact classname here would not be a good idea for ID. Handler table, > however, combined with object handle seems to be good way to ID an object > - it's how the engine identifies them after all... Best regards, Marcus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php