次のコードがあり、「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エラー:致命的なエラー:定数式に無効な操作が含まれています しかし、私のコードは静的なものを宣言していないため、私の質問には答えませんでした。
説明したとおり here
クラスメンバ変数は「プロパティ」と呼ばれます。 「属性」や「フィールド」などの他の用語を使用して参照されることもありますが、この参照の目的のために「プロパティ」を使用します。これらは、キーワードpublic、protected、またはprivateのいずれかを使用して定義され、その後に通常の変数宣言が続きます。この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価でき、評価するためにランタイム情報に依存してはなりません。
この作業を行う唯一の方法は次のとおりです。
<?php
namespace App;
class Amazon
{
protected $serviceURL;
public function __construct()
{
$this->serviceURL = config('api.Amazon.service_url');
}
}
この方法では、クラスプロパティを初期化することはできません。初期化をコンストラクターに移動する必要があります。
私が使用した別の実用的な代替手段は、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');
});
} }