empty () сначала * вызывает метод __isset () и только если он возвращает true, метод __get (). т. е. ваш класс должен также реализовать __isset ().
* 1003 Е.Г. *
<?php
class Foo {
public function __isset($name) {
echo "Foo:__isset($name) invoked\n";
return 'bar'===$name;
}
public function __get($name) {
echo "Foo:__get($name) invoked\n";
return 'lalala';
}
}
$foo = new Foo;
var_dump(empty($foo->dummy));
var_dump(empty($foo->bar));
печать
Foo:__isset(dummy) invoked
bool(true)
Foo:__isset(bar) invoked
Foo:__get(bar) invoked
bool(false)
* edit: если он не может "напрямую" найти доступное свойство в хеш-таблице свойств объекта.