Как избежать динамических свойств в PHP (возникает ошибка при установке необъявленного свойства) - PullRequest
17 голосов
/ 04 февраля 2012

Пример:

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 вызвать ОШИБКУ в этой ситуации?

Ответы [ 2 ]

15 голосов
/ 04 февраля 2012

Использовать __ 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';
?>
0 голосов
/ 04 февраля 2012

"Я не хочу динамических свойств в моих объектах."Я предполагаю, что вы имеете в виду, что вы не хотите, чтобы переменные вашего объекта когда-либо были неопределенными?Если это так, то просто создайте все переменные вашего класса.Вы даже можете сделать их статическими, если вы действительно обеспокоены тем, что они являются постоянными, а не динамическими.

Если вы попытаетесь получить доступ к переменной объекта, которая не существует, тогда PHP будет выбросить ошибку.Ответ, предложенный Радменом, на самом деле сделает так, что вместо того, чтобы выдавать ошибку, PHP будет динамически создавать неопределенные переменные объекта для вас на лету.

...