Proposal: Two additional magic methods for PHP objects -
__refer(void): Refer method is called whenever object's identifier is assigned to variable, if such method is present. Example: $foo = new Bar; $bar = $foo; //__refer invoked Return values: null to proceed by assigning the variable to objects identifier. Any other value returned would be assigned to variable which is to hold the reference in case of null. __unrefer($var): Unrefer method would be called whenever object's identifier is about to be replaced by anything else and would hold that something else as argument. Example: $foo = new Bar; $foo = false; //__unrefer invoked with false as argument Return values: null to proceed with default by replacing value, false to not to replace value and keep the reference in variable. Real life use sample: class SomeObject{ protected $count; function __refer(){ $this->count++; } } $foo = new Bar; $bar = $foo; $foobar = $bar; //SomeObject::$count = 2 ---------------------------------------------------- class SomeCustomString{ protected $value; function __unrefer($value){ if(is_string($value)){ $this->value = $value; } throw new UnexpectedValueException('This object can only hold strings'); } } $foo = new SomeCustomString; $foo = 1; ------------------------------------------------------ Although I can't think of many uses to __refer I however can think of one very useful use case for __unrefer - custom "types". I actually did borrow the __unrefer functionality from SPL_Types PECL package when trying to solve problem of how to validate contents of object properties which are going to be set by other party and cant be validated via set or get. I know there are ways to do this, but none seemed pretty enough for me to actually implement. Any feedback on this is very welcome, especially from core developers and potential users. What would be the issues, potential drawbacks, other? Separate question to core developers would be, how hard it would be to implement such functionality, or is this even possible with reasonable effort? Thanks, regards Matiss Roberts Treinis <mrtreinis at gmail dot com> -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php