|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2007-03-13 23:57 UTC] stephan_schmidt at usa dot com
Description:
------------
When overloading with __get() to grab an index of an associative array inside an object, the overloaded variable returns 'false' when tested with empty() whether the value is empty or not (see Example 2 for incorrect results).
Testing overloaded variables that were not in an associative array with empty() returns the expected results (Example 3).
Reproduce code:
---------------
<?
class A {
public $myArray = array('nonEmptyVar' => 5, 'emptyVar' => '');
function __get($var) {
return $this->myArray[$var];
}
}
class B {
public $nonEmptyVar = 5;
public $emptyVar = '';
function __get($var) {
return $this->$var;
}
}
$a = new A();
$b = new B();
echo '<p>Example 1:<br>';
echo empty($a->myArray['nonEmptyVar']) ? 'empty' : 'not empty';
echo '<br>';
echo empty($a->myArray['emptyVar']) ? 'empty' : 'not empty';
echo '<p>Example 2:<br>';
var_dump($a->nonEmptyVar);
echo empty($a->nonEmptyVar) ? 'empty' : 'not empty';
echo '<br>';
var_dump($a->emptyVar);
echo empty($a->emptyVar) ? 'empty' : 'not empty';
echo '<p>Example 3:<br>';
echo empty($b->nonEmptyVar) ? 'empty' : 'not empty';
echo '<br>';
echo empty($b->emptyVar) ? 'empty' : 'not empty';
?>
Expected result:
----------------
Example 1:
not empty
empty
Example 2:
int(5) not empty
string(0) "" empty
Example 3:
not empty
empty
Actual result:
--------------
Example 1:
not empty
empty
Example 2:
int(5) empty
string(0) "" empty
Example 3:
not empty
empty
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Nov 06 11:00:01 2025 UTC |
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'; ?>