Константное выражение содержит недопустимые операции

У меня есть следующий код, где я получаю ошибку "PHP Fatal Error: Константа выражение содержит недопустимые операции". Он отлично работает, когда я определяю переменную в конструкторе. Я использую Laravel Framework.

<?php

namespace App;

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

    public function __construct()
    {
    }

}

Я видел этот вопрос: Ошибка PHP: фатальная ошибка: выражение константы содержит недопустимые операции Но мой код ничего не объявляет как статический, так что не ответил на мой вопрос.

Ответ 1

Как описано здесь

Переменные члена класса называются "свойствами". Вы также можете увидеть, как они ссылаются на другие термины, такие как "атрибуты" или "поля", но для целей этой ссылки мы будем использовать "свойства". Они определяются с использованием одного из ключевых слов public, protected или private, за которым следует объявление нормальной переменной. Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.

Единственный способ сделать эту работу: -

<?php

namespace App;

class Amazon
{
  protected $serviceURL;

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

Ответ 2

Инициализация свойств класса не допускается таким образом. Вы должны переместить инициализацию в конструктор.

Ответ 3

Еще одна рабочая альтернатива, которую я использовал - это 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');
        });
    } }