Re: [RFC] Property Accessors 1.2 : Shadowing

From: Date: Sat, 27 Oct 2012 17:35:45 +0000
Subject: Re: [RFC] Property Accessors 1.2 : Shadowing
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-63666@lists.php.net to get a copy of this message
Recursion is guarded by the same mechanism __get uses to avoid recursion. On 10/26/2012 9:33 AM, Stas Malyshev wrote:
Hi!
v1.2 Proposes that this be inverted such that if there is an accessor defined for a given property name, the accessor will always be used. The accessor would be able to get/set/isset/unset the property with the same name as the accessor. No direct access to the property would be allowed except from within the accessor.
One of the deficiencies frequently mentioned for __get was "what if I want to override access for existing variable?" Given that, I think accessor priority is a good thing. Now, with direct access from within the accessor it may get a bit tricky, especially considering loops, etc. What would happen in the scenario of __getHours calling foo() which does "return $this->Hours"? Is __getHours called again? Is it a fatal error? Does it return "undefined" like __get does?
v1.2 proposal seems to make the most sense however it would incur a slight (possibly *very* slight) performance penalty.
It may be an extra hash lookup, but if we could probably add the existence of accessor (or maybe even pointer) into zend_property_info then we wouldn't need the second hash lookup probably.
-- -Clint

« previous php.internals (#63666) next »