常量表达式包含无效操作

时间:2016-11-27 10:24:04

标签: php laravel class

我有以下代码,我得到错误“PHP致命错误:常量表达式包含无效操作”。当我在构造函数中定义变量时,它工作正常。我正在使用Laravel框架。

<?php

namespace App;

class Amazon
{
    protected $serviceURL = config('api.amazon.service_url');

    public function __construct()
    {
    }

}

3 个答案:

答案 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');
        });
    } }