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


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

<?php

namespace App;

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

    public function __construct()
    {
    }

}
Author: Aaron, 2016-11-27

3 answers

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

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

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

<?php

namespace App;

class Amazon
{
  protected $serviceURL;

  public function __construct()
  {
    $this->serviceURL = config('api.amazon.service_url');
  }
}
 25
Author: prateekkathal, 2016-11-27 11:57:50

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

 0
Author: Curos, 2016-11-27 10:30:39

Другая рабочая альтернатива, которую я использовал, - это 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');
        });
    } }
 0
Author: 4givN, 2018-07-14 15:46:06