#43583 [Opn->Bgs]: empty() fails when examining property of object accessed through __get
| From: | johannes@php.net | Date: | Sun, 16 Dec 2007 18:33:54 +0000 |
| Subject: | #43583 [Opn->Bgs]: empty() fails when examining property of object accessed through __get | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-120680@lists.php.net to get a copy of this message | ||
ID: 43583
Updated by: johannes@php.net
Reported By: michael at dmgx dot com
-Status: Open
+Status: Bogus
Bug Type: Class/Object related
Operating System: Linux
PHP Version: 5.2.5
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
See also the previous comments. Everything else would be wrong.
Previous Comments:
------------------------------------------------------------------------
[2007-12-13 04:23:00] crrodriguez at suse dot de
you have to define __isset magic method.
------------------------------------------------------------------------
[2007-12-12 21:50:23] felipe@php.net
In PHP 5.3 it works fine.
------------------------------------------------------------------------
[2007-12-12 19:07:07] michael at dmgx dot com
Description:
------------
Empty returns false whenever a property of an object is accessed
through __get. This problem has been reported before. The answer that
"it's a feature" is entirely bogus - Either return the right value or
throw a damn error but don't do nothing and leave people to wonder what
the Hell is going on with their script. I just lost two full days to
this "feature" and I'm not amused.
empty(someFunction());
throws an error. If this bug is too much trouble to fix set it up so
empty($object->property);
also throws an error when a __get has been set.
Reproduce code:
---------------
class foo
{
protected $data = array();
public function __set($element, $value) { $this->data[$element] =
$value; }
public function __get($element) { return $this->data[$element]; }
}
$bar = new foo();
$bar->cat = 'meow';
empty($bar->cat); // returns false, as expected.
$bar->cat = '';
empty($bar->cat); // returns false, should return true.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=43583&edit=1