【问题标题】:Constant expression contains invalid operations [duplicate]常量表达式包含无效操作[重复]
【发布时间】:2017-04-11 04:55:45
【问题描述】:

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

<?php

namespace App;

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

    public function __construct()
    {
    }

}

我看过这个问题:PHP Error : Fatal error: Constant expression contains invalid operations 但是我的代码没有将任何东西声明为静态,所以没有回答我的问题。

【问题讨论】:

  • 此时不能使用函数,将其移至构造函数
  • 你需要在construct()函数中分配serviceURL值

标签: php class properties syntax-error compile-time-constant


【解决方案1】:

我使用的另一个可行的替代方法是 boot( ) 和 Laravel Eloquent:

<?php

namespace App;

class Amazon {
    protected $serviceURL;

    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model){
            $model->serviceURL = config('api.amazon.service_url');
        });
    } }

【讨论】:

    【解决方案2】:

    here所述

    类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字 public、protected 或 private 之一来定义的,然后是一个普通的变量声明。这个声明可能包括一个初始化,但这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

    您可以完成这项工作的唯一方法是:-

    <?php
    
    namespace App;
    
    class Amazon
    {
      protected $serviceURL;
    
      public function __construct()
      {
        $this->serviceURL = config('api.amazon.service_url');
      }
    }
    

    【讨论】:

      【解决方案3】:

      不允许以这种方式初始化类属性。您必须将初始化移动到构造函数中。

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 1970-01-01
        • 2017-06-18
        • 2017-05-16
        • 2017-03-03
        • 2017-10-19
        相关资源
        最近更新 更多