Php: предотвращение создания переменных уровня объекта

Я создал новую переменную уровня объекта из-за опечатки. Это было сложно отлаживать. Хотя это может быть ленивой функцией, существует ли способ предотвратить создание переменных объекта-объекта назначением? Я надеялся, что error_reporting, по крайней мере, скажет мне, что я сделал это, если не предотвратить это.

<!--?php
error_reporting(E_STRICT|E_ALL);
class SearchField { var $field1;
}
$field = new SearchField();
$field--->field1 = 'value1';
echo '<p>'.var_dump($field).'</p>';
$field->feild1 = 'value2';
echo '<p>'.var_dump($field).'</p>';
$field = new SearchField();
$field->field1 = 'value1';
echo '<p>'.var_dump($field).'</p>';
?>

Здесь опечатка довольно очевидна. Иногда это не так очевидно.

object(SearchField)#1 (1) { ["field1"]=> string(6) "value1" }
object(SearchField)#1 (2) { ["field1"]=> string(6) "value1" ["feild1"]=> string(6) "value2" }
object(SearchField)#2 (1) { ["field1"]=> string(6) "value1" }
1 ответ

Вы можете использовать волшебный сеттер:

public function __set() { throw new LogicException('Thou shalt not create variables on me');
}

http://www.php.net/manual/en/language.oop5.overloading.php#object.set

Хотя я бы поставил под вопрос, насколько хорошо идея состоит в том, чтобы добавить это ко всем вашим классам только для того, чтобы защищать эту возможную ошибку. Вы должны использовать protected свойства и явные методы getter и setter и привыкнуть к использованию $field->setField('foo'), что лучше начать с практики OOP.

licensed under cc by-sa 3.0 with attribution.