Магическая функция __isset () для самого объекта - PullRequest
0 голосов
/ 14 октября 2011

Я знаю, что вы можете сделать это

class Object
{
    private $ar;

    public function __isset($name)
    {
        return isset($this->ar[$name]);
    }
}

, который затем можно использовать для следующих действий

$obj = new Object();
if (isset($obj->name)) { /* ... */ }

Однако есть ли способ сделать это

$obj = new Object();
if (isset($obj)) { /* .... */ }

Где я могу контролировать возвращение статуса $obj, используя магический метод __isset() для самого объекта.

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Вы не можете, потому что это не имеет никакого смысла (по крайней мере, не так, как предполагается isset()). Таким образом, isset($obj) всегда верно, если оно указывает на некоторый объект, а не на NULL / undefined.

2 голосов
/ 14 октября 2011

Вы можете только определить новую глобальную функцию myIsset() или что-то подобное для этого.

function myIsset($obj = NULL)
{
    ...
}

При проверке переменной $obj с помощью isset PHP вообще не взаимодействует с объектом, на который может ссылаться переменная.

0 голосов
/ 14 октября 2011

Магический метод __isset не предназначен для использования таким образом.

Согласно Руководству по PHP :

"__isset () вызывается вызовом isset () или empty () для недоступных свойств."

...