Php: невозможно присвоить значение свойства в объявлении

Я не понимаю причины, лежащие в основе различного подхода к присвоению переменных между глобальным контекстом и контекстом класса:

$var1 = "a" . "b"; # PHP syntax ok class myClass { private $var2 = "a" . "b"; # PHP Parse error: syntax error, unexpected '.', expecting ',' or ';' } 

PS: видимость собственности (частная / защищенная / общественная) не играет роли.

Это не «назначение переменной в контексте класса». private $var объявляет свойство для класса, и вы также придаете ему значение по умолчанию. Вы объявляете структуру класса здесь, что не совпадает с назначением переменной в процедурный код. Структура класса анализируется парсером и компилируется компилятором, а значение по умолчанию для свойства устанавливается на этом этапе синтаксического анализа / компиляции . Компилятор не выполняет процедурный код; он может обрабатывать только постоянные значения .

Таким образом, вы не можете объявлять свойства класса со значениями по умолчанию, которые нуждаются в оценке , потому что часть PHP, которая обрабатывает объявление классов, синтаксический анализатор / компилятор, не оценивает .

Цитата из документов PHP (мой акцент)

Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.

Вместо этого определите значения в конструкторе, если они зависят от какой-либо оценки.