常量表达式包含无效操作[重复]

Posted

技术标签:

【中文标题】常量表达式包含无效操作[重复]【英文标题】: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值 【参考方案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】:

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

【讨论】:

以上是关于常量表达式包含无效操作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

常量指针的混淆[重复]

无效的常量表达式比特广播

模板参数无效;不能出现在常量表达式中

intel fortran 编译错误“此内在函数在常量表达式中无效”

反思 - Java 8 - 无效的常量类型

C ++:在函数内声明数组时,表达式必须具有常量值[重复]