Я пытаюсь получить доступ к статической переменной члена класса в массиве.
Мой код (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 и не могу понять, что я делаю неправильно.
К сожалению, вы не можете ссылаться на другую переменную или класс в первоначальном объявлении свойства класса. Это просто ограничение языка в его нынешнем виде. Общим решением проблемы является инициализация свойства в конструкторе, например
class Bar
{
public $someArray = array();
public function __construct()
{
$this->someArray = array(
Foo::$staticVar
);
}
}
На неопределенно связанной ноте PHP 5.6, по крайней мере, добился некоторого расплывчатого прогресса, позволив вам определять константы как основные выражения, см. https://3v4l.org/6TDZV
Других решений пока нет …