It should not be __isset
,because isset()
is not the same thing as empty()
views:
124answers:
4I think in general you'll find that the following is the PHP equivalent:
isset($variable[0])
If, for example, the variable is a string, this would detect that the string was empty. It would work similarly for most primitive types (if not all).
As it says on this page:
__isset() is triggered by calling isset() or empty() on inaccessible properties.
There is no dedicated magic-method for empty()
If __isset() returns true, empty() will then invoke __get() to check the value of the property.
doesn't property_exists() work for you if you're just testing if a class variable exists?
As an addition to Inspire's answer:
class Foo {
public function __isset($name) {
echo "public function __isset($name)\n";
return 'bar'===$name;
}
public function __get($name) {
echo "public function __get($name)\n";
return 'bar'===$name ? 0 : NULL;
}
}
$foo = new Foo;
echo empty($foo->foo) ? ' empty' : ' not empty', "\n";
echo empty($foo->bar) ? ' empty' : ' not empty', "\n";
the output is
public function __isset(foo)
empty
public function __isset(bar)
public function __get(bar)
empty
meaning for the first property (foo) empty() only invoked __isset() which returned false -> empty($foo->foo)===true
For the second property (bar) __isset() was invoked and it returned true. Then the property is fetched via __get() and interpreted as a boolean value (see http://docs.php.net/language.types.type-juggling). And since (bool)0 is false
, empty() also returns true
for empty($foo->bar)