В PHP, если вы определяете класс, а затем создаете экземпляр объекта этого класса, позже можно произвольно добавить новых членов в этот класс. Например:
class foo {
public $bar = 5;
}
$A = new foo;
$A->temp = 10;
Тем не менее, мне бы хотелось, чтобы таким образом было невозможно добавлять новых участников. По сути, я хочу, чтобы у класса были ТОЛЬКО члены, указанные в его определении; если вы попытаетесь установить какие-либо другие члены, это фатально ошибки. Намерение здесь состоит в том, что я хочу определить класс как очень специфический набор свойств и убедиться, что ТОЛЬКО эти свойства существуют в классе, так что содержимое класса четко определено и не может измениться позже (значения каждого члена может меняться, но не сами участники).
Я понимаю, что могу сделать это с помощью метода __set и просто получить фатальную ошибку, если вы попытаетесь установить элемент, который еще не существует, но это раздражает необходимость включать его в каждое определение класса (хотя я мог бы определить каждый из моих классов расширяет базовый класс этим методом, но это тоже раздражает). E.g.:
class foo {
public $bar = 5;
private function __set($var, $val) {
trigger_error("Cannot dynamically add members to a class", E_USER_ERROR);
}
}
Есть ли другой (желательно более удобный) способ сделать это? Кроме модификации самого PHP, чтобы запретить это поведение?