我在定义类变量时遇到问题,例如,当验证表单时,这里是源代码
class LoginFormRequest extends DefaultFormRequest
{
protected $rulesMessages = [
'name' => [
'required' => trans('messages.enter_username')
],
'password' => [
'required' => trans('messages.enter_password')
]
];
}
返回错误为"语法错误,意外的'(',应为']'"
尝试将它们移动到__construct
方法中。
public function __construct()
{
$this -> rulesMessages = [
'name' => [
'required' => trans('messages.enter_username')
],
'password' => [
'required' => trans('messages.enter_password')
]
];
}
允许任何类属性被初始化为的任何值都必须是常量(我不是指属性本身,我是指您试图将其初始化为的数据)。所有这一切都意味着,无论它是什么,都必须在编译时而不是运行时知道,因此在提取您试图将属性初始化为的值之前,它不能依赖于任何其他实际运行的代码。这就是为什么它是编译器(语法)错误,而不是运行时间错误。手册中的相关引用:
此声明可能包括一个初始化,但此初始化必须是一个常数值——也就是说,它必须能够在编译时进行求值,并且必须不依赖于运行时信息才能进行求值。
以下所有内容都是有效的类属性初始化:
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;
}