Несмотря на то, что у меня нет этой переменной, при обращении к ней я не получаю сообщение об ошибке

<?php
class Test{
public $test_1, $test_2;
}$object = new Test();
$object->test_1 = "THIS IS A TEST";
$object->test_2 = "THIS IS A TEST 2";
$object->test_3 = "THIS IS A TEST 3";

var_dump($object);

Как видите, у меня нет переменной с именем test_3. Но я не получаю ошибку. Работает отлично. Зачем? Это вывод, который я получаю.

object(Test)#1 (3) {
["test_1"]=>
string(14) "THIS IS A TEST"["test_2"]=>
string(16) "THIS IS A TEST 2"["test_3"]=>
string(16) "THIS IS A TEST 3"}

1

Решение

В PHP вы можете создавать публичные переменные-члены на лету. Если вы хотите предотвратить это, вы можете перегрузить __set() магический метод и выбросить исключение, если кто-то пытается сделать это:

class Test{
public $test_1, $test_2;

public function __set($name, $value) {
throw new \Exception('You cannot do this!');
}
}
4

Другие решения

Других решений пока нет …