Edit report at https://bugs.php.net/bug.php?id=55731&edit=1
ID: 55731 Updated by: s...@php.net Reported by: 421034509 at qq dot com Summary: __get after __unset -Status: Not a bug +Status: Closed Type: Bug Package: Unknown/Other Function Operating System: windows xp PHP Version: 5.3.8 -Assigned To: +Assigned To: stas Block user comment: N Private report: N New Comment: The fix for this bug has been committed. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. For Windows: http://windows.php.net/snapshots/ Thank you for the report, and for helping us make PHP better. fix for bug #63462 should also fix this one. Previous Comments: ------------------------------------------------------------------------ [2012-11-08 08:13:17] ocramius at gmail dot com I got pointed here after filing #63462 ( https://bugs.php.net/bug.php?id=63462 ). Shouldn't the `getter_guard` be disabled for "\0Example\0p1: (laurence's example) when already in the context of `__get` (and similar logic for all the other magic methods)? I have absolutely no understanding of PHP internals about this, but I wouldn't expect the magic getter to work again for the same property when we already know it was the requested one. This is actually a (quite problematic) bug for me since it denies any action on unset properties, which is a feature I need when working with proxies. If I understand this correctly, at https://github.com/php/php-src/blob/6ba376f552238de643a665d355fd5e59c40315b5/Zend/zend_object_handlers.c#L559-572 the guard is used. I don't understand why `guard->in_set` isn't checked the second time though. Does `zend_get_property_guard` retrieve a different item for different `property_info`? ------------------------------------------------------------------------ [2011-09-22 03:36:35] 421034509 at qq dot com Thank you!I got it! ------------------------------------------------------------------------ [2011-09-22 01:28:25] larue...@php.net No, if the property is private, and the getter is called out of call entry(means access a private property out of scope), zend vm will return NULL, but zend_read_property will assume as a "public property name", since PHP is a flexible language. ------------------------------------------------------------------------ [2011-09-22 01:18:53] 421034509 at qq dot com When get_property_info successed in the Example class, if the private property is defined but be unsetted,zend vm return a property info with name "\0Example\0propertyname", but if the property is undefined(or defined but not be unsetted),zend vm return a property info with name "propertyname". Is that true? ------------------------------------------------------------------------ [2011-09-22 01:17:55] larue...@php.net because there is no '\0Example\0p3' in property_info of Example class entry ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=55731 -- Edit this bug report at https://bugs.php.net/bug.php?id=55731&edit=1