web-dev-qa-db-ja.com

定数式に無効な操作が含まれています

次のコードがあり、「PHP Fatal Error:Constant expression contains invalid operations」というエラーが表示されます。コンストラクターで変数を定義するとうまくいきます。私はLaravelフレームワークを使用しています。

<?php

namespace App;

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

    public function __construct()
    {
    }

}

私はこの質問を見ました: PHPエラー:致命的なエラー:定数式に無効な操作が含まれています しかし、私のコードは静的なものを宣言していないため、私の質問には答えませんでした。

17
Aaron

説明したとおり here

クラスメンバ変数は「プロパティ」と呼ばれます。 「属性」や「フィールド」などの他の用語を使用して参照されることもありますが、この参照の目的のために「プロパティ」を使用します。これらは、キーワードpublic、protected、またはprivateのいずれかを使用して定義され、その後に通常の変数宣言が続きます。この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価でき、評価するためにランタイム情報に依存してはなりません。

この作業を行う唯一の方法は次のとおりです。

<?php

namespace App;

class Amazon
{
  protected $serviceURL;

  public function __construct()
  {
    $this->serviceURL = config('api.Amazon.service_url');
  }
}
42
prateekkathal

この方法では、クラスプロパティを初期化することはできません。初期化をコンストラクターに移動する必要があります。

1
Curos

私が使用した別の実用的な代替手段は、boot( ) with 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');
        });
    } }
0
4givN