Невозможно получить доступ к статической переменной-члену из класса в массиве

Я пытаюсь получить доступ к статической переменной члена класса в массиве.

Мой код (index.php):

<?php

class Foo
{
public static $staticVar = 'test';
}

class Bar
{
public $someArray = array(
Foo::$staticVar
);
}

$cls = new Bar();

var_dump($cls->someArray);

?>

На PHP-7.0 я получаю эту ошибку:

Фатальная ошибка PHP: константное выражение содержит недопустимые операции в
/var/www/html/index.php в строке 12

На PHP-5.6 я получаю эту ошибку:

Ошибка синтаксического анализа PHP: синтаксическая ошибка, неожиданное «$ staticVar» (T_VARIABLE),
ожидающий идентификатор (T_STRING) или класс (T_CLASS) в
/var/www/html/index.php в строке 11

Я просто хочу иметь строку «test» в моем массиве.

Странно, что когда я «выводю» переменную, она работает как положено:

echo Foo::$staticVar // prints 'test'

Я новичок в PHP и не могу понять, что я делаю неправильно.

2

Решение

К сожалению, вы не можете ссылаться на другую переменную или класс в первоначальном объявлении свойства класса. Это просто ограничение языка в его нынешнем виде. Общим решением проблемы является инициализация свойства в конструкторе, например

class Bar
{
public $someArray = array();

public function __construct()
{
$this->someArray = array(
Foo::$staticVar
);
}
}

На неопределенно связанной ноте PHP 5.6, по крайней мере, добился некоторого расплывчатого прогресса, позволив вам определять константы как основные выражения, см. https://3v4l.org/6TDZV

2

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

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

По вопросам рекламы [email protected]