我有以下代码,我得到错误“PHP致命错误:常量表达式包含无效操作”。当我在构造函数中定义变量时,它工作正常。我正在使用Laravel框架。
<?php
namespace App;
class Amazon
{
protected $serviceURL = config('api.amazon.service_url');
public function __construct()
{
}
}
答案 0 :(得分:38)
如上所述here
类成员变量被称为&#34;属性&#34;。您也可以使用其他术语来查看它们,例如&#34;属性&#34;或&#34;字段&#34;,但为了本参考的目的,我们将使用&#34;属性&#34;。它们通过使用public,protected或private之一,然后是普通变量声明来定义。此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。
你能做到这一点的唯一方法是: -
<?php
namespace App;
class Amazon
{
protected $serviceURL;
public function __construct()
{
$this->serviceURL = config('api.amazon.service_url');
}
}
答案 1 :(得分:1)
不允许以这种方式初始化类属性。您必须将初始化移动到构造函数中。
答案 2 :(得分:0)
我使用的另一个可行的替代方法是与Laravel Eloquent的boot( )
一起使用:
<?php
namespace App;
class Amazon {
protected $serviceURL;
protected static function boot()
{
parent::boot();
static::creating(function ($model){
$model->serviceURL = config('api.amazon.service_url');
});
} }