Пример:
error_reporting(E_ALL | E_STRICT); class Test {} $obj = new Test(); $obj->undeclared = "oops"; // I want an error here !! :( echo $obj->algo; // oops
Я тестировал его на PHP 5.2.11 и 5.3.0.
Я не хочу динамических свойств в своих объектах.
Можно ли заставить PHP выражать ОШИБКУ в этой ситуации?
Использовать __set () ?
<?php class Test { public $bar; public function __set($name, $value) { throw new Exception('Cant set!'); } } $obj = new Test; $obj->bar = 'foo'; $obj->foo = 'evil'; ?>
«Я не хочу динамических свойств в своих объектах». Я предполагаю, что вы имеете в виду, что вы не хотите, чтобы ваши объектные переменные никогда не были неопределенными? Если это так, просто создайте все переменные класса. Вы даже можете сделать их статичными, если вы действительно обеспокоены тем, что они являются постоянными, а не динамическими.
Если вы попытаетесь получить доступ к переменной объекта, которая не существует, тогда PHP выдает ошибку. Ответ, который предложил radmen, фактически заставил бы его сделать так, чтобы вместо того, чтобы бросать ошибку, PHP динамически создавал неопределенные переменные объекта для вас на лету.