Конкатенация __DIR__ константа со строкой в ​​виде значения массива, являющегося членом класса в PHP

Может ли кто-нибудь сказать мне, почему это не работает? Это просто грубый пример того, что я пытаюсь сделать где-то еще.

$stuff = array( 'key' => __DIR__ . 'value' ); 

Однако это вызывает ошибку:

 PHP Parse error: syntax error, unexpected '.', expecting ')' in /var/www/.../testing.php on line 6 

Кроме того, это работает:

 $stuff = array( 'key' => "{__DIR__} value" ); 

Первая часть кода не работает, потому что это не постоянное выражение, поскольку вы пытаетесь объединить две строки. Первоначальные члены класса должны быть постоянными.

Из документации :

Инициализация [property] должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.

Вы не можете использовать оператор в инициализации свойств. Обходной путь заключается в использовании конструктора:

 public function __construct() { $this->stuff = array( 'key' => __DIR__ . 'value' ); } 

Из документа PHP:

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

http://www.php.net/manual/en/language.oop5.properties.php

Задайте значение $ stuff для вашего конструктора

 function __construct() { $this->$stuff = array( 'key' => __DIR__ . 'value' ); }