Конкатенация константы __DIR__ со строкой в ​​качестве значения массива, являющегося членом класса в PHP - PullRequest
9 голосов
/ 06 января 2012

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

$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"
);

Ответы [ 3 ]

7 голосов
/ 06 января 2012

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

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

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

3 голосов
/ 06 января 2012

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

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

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

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

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

0 голосов
/ 06 января 2012

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

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