#47215 [Opn]: magic method __set() is bypassed on recursive call

From: Date: Sun, 25 Jan 2009 22:55:59 +0000
Subject: #47215 [Opn]: magic method __set() is bypassed on recursive call
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-133210@lists.php.net to get a copy of this message
ID: 47215 User updated by: remy dot damour at laposte dot net Reported By: remy dot damour at laposte dot net Status: Open Bug Type: Class/Object related Operating System: debian PHP Version: 5.2.8 New Comment: Maybe this is not a bug, but simply expected behavior? Because otherwise we could not be able to define object properties using __set() magic method Regards, Remy Previous Comments: ------------------------------------------------------------------------ [2009-01-25 22:23:41] remy dot damour at laposte dot net Description: ------------ Magic method __set() is bypassed on recursive call. PHP automatically creates a property on instance instead of recursively calling __set() or instead of throwing a recursivity error For additional details, please read: http://www.qc4blog.com/?p=458 Reproduce code: --------------- class Fruits { protected $_props = array(); // inner array mapping properties to values public function __set($name, $value) { $this->_props[$name] = $value; if ('apple' == $name) { $this->apple = 'green'; } } } $a = new Fruits(); $a->banana = 'yellow'; var_dump(property_exists($a, 'banana')); // output: false $a->apple = 'red'; var_dump(property_exists($a, 'apple')); // output: true Expected result: ---------------- Throw a recursivity exception Actual result: -------------- no exception thrown, property is automatically created by passing __set() ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47215&edit=1

« previous php.bugs (#133210) next »