Любое значение, что любое свойство класса разрешено быть инициализирован до должен быть постоянным (я не имею в виду само свойство, я имею в виду данные, которые вы пытаетесь инициализировать). Все это означает, что все, что бы это ни было, должно быть известно во время компиляции, а не во время выполнения, поэтому оно не может зависеть от какого-либо другого фактически исполняемого кода до того, как сможет извлечь значение, которое вы пытаетесь инициализировать. Вот почему это ошибка компилятора (синтаксиса), а не ошибка времени выполнения. Соответствующая цитата из manual:
Это заявление может включать в себя инициализацию, но инициализация должна быть постоянной величиной - то есть, он должен быть в состоянии оценить во время компиляции и не должна зависеть от времени выполнения информацию для оценки.
Все допустимая является следующей инициализацией класса недвижимости:
class One
{
protected $one = 'One';
}
class Two
{
protected $two = 2;
}
class Three
{
protected $three = [
1 => 'one',
2 => 'two'
];
}
// We can use constants defined using const keyword, because they are
// evaluated at compile time. See http://stackoverflow.com/a/3193704/697370
const FOUR_CONST = 4;
class Four
{
protected $four = FOUR_CONST;
}
Ниже приведено недостоверные инициализации класса недвижимости:
class BadOne
{
protected $one = foo();
}
$IamAboolean = false;
class BadTwo
{
protected $two = $IamAboolean ? false : true;
}
class BadThree
{
protected $three = 5 + 4;
}
спасибо это было полезно, но с некоторой коррекцией здесь есть код защищенные $ rulesMessages; функция __construct общественности() { $ this-> rulesMessages = [ 'имя' => [ 'требуется' => транс ('messages.enter_username') ], 'пароль' => [ «требуется '=> trans (' messages.enter_password ') ] ]; } – Safouen
Извините, да - не нужно было просто скопировать/вставить;) –