#47215 [Opn]: magic method __set() is bypassed on recursive call
| From: | remy dot damour at laposte dot net | 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