Как избежать PHP для автоматического создания атрибутов? - PullRequest
0 голосов
/ 25 декабря 2010

При этом:

class MyClass
{
    public $myAttr;
}

$c = new MyClass();
$c->someStuff = 1;

У меня нет ни сообщения об ошибке, ни уведомления, ни что-либо, что бы сказать мне «эй, я не знаю someStuff!»

Есть ли способ сделать PHP менее легким по этому поводу?

Спасибо

Ответы [ 2 ]

4 голосов
/ 25 декабря 2010

Реализуйте магические методы __get() и __set() и попросите их наплевать на уведомление.Эти методы вызываются при доступе к свойству, которое не было объявлено (или не видно).

public function __get($name) {
    trigger_error(__CLASS__ . " object has no such property $name", E_USER_NOTICE);
    return NULL;
}

public function __set($name, $value) {
    trigger_error(__CLASS__ . " object has no such property $name", E_USER_NOTICE);
}
2 голосов
/ 25 декабря 2010

Я часто определяю SafeObject для наследования, который умирает, когда я пытаюсь прочитать / записать неопределенный атрибут:

class SafeObject {
    function __get($key) { die("Attempt to get nonexistent member $key"); }
    function __set($key, $value) { die("Attempt to set nonexistent member $key"); }
}

Идея заключается в том, что я никогда не должен вызывать ни один из этих методов во время производствакод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...