ID: 40797 Updated by: [EMAIL PROTECTED] -Summary: empty() breaks when overloading with __get Reported By: stephan_schmidt at usa dot com -Status: Closed +Status: Open Bug Type: Documentation problem Operating System: Windows 200X PHP Version: 5.2.1 Assigned To: dmitry New Comment:
Re-opening & update summary Previous Comments: ------------------------------------------------------------------------ [2007-03-15 14:32:24] stephan_schmidt at usa dot com Thanks. The fact that overloading with __isset() also affects empty() should be documented somewhere, as the page on overloading (http://us3.php.net/manual/en/language.oop5.overloading.php) contains only examples for isset(). ------------------------------------------------------------------------ [2007-03-14 11:24:32] [EMAIL PROTECTED] To make isset() and empty() work with overloaded properties you must implement __isset() magic method, otherwise isset() and empty() check for regular properties. <?php class A { public $myArray = array('nonEmptyVar' => 5, 'emptyVar' => ''); function __get($var) { return $this->myArray[$var]; } function __isset($var) { return isset($this->myArray[$var]); } } $a = new A(); echo empty($a->nonEmptyVar) ? 'empty' : 'not empty'; echo '<br>'; echo empty($a->emptyVar) ? 'empty' : 'not empty'; ?> ------------------------------------------------------------------------ [2007-03-14 01:36:16] [EMAIL PROTECTED] Dmitry, please take a look at zend_std_has_property(). ------------------------------------------------------------------------ [2007-03-14 00:57:08] stephan_schmidt at usa dot com The "Actual Results" were from the results of the above script run on a clean install of PHP 5.2.1 (Win 2000 SP4). No zend extensions are present or in use. The code above did not run as expected on any of the Win 200X servers it was tested on. Line 6 of the output read "int(5) empty" in every test case. I suspect it may have to do with the fact that empty() does not accept a function call as a parameter (i.e. empty(trim($myVar))) since overloading calls __get. However, one would expect it to also result in a fatal error if that were the case. ------------------------------------------------------------------------ [2007-03-14 00:11:15] [EMAIL PROTECTED] That's exactly how it works here. Make sure you've disable any zend_extensions. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/40797 -- Edit this bug report at http://bugs.php.net/?id=40797&edit=1
