Вы не можете этого сделать, потому что массив статичен и в определении класса вы не можете использовать динамические значения, такие как объекты или функции.
В качестве примера, что не работает!
(Здесь я использовал функцию, но, как я сказал, что вы не можете назначить «динамическое» значение свойства в определении класса)
class A {
private $basename = basename(__FILE__);
}
Что будет работать для этого следующих один, потому что мы присваиваем значение в конструкторе.
class A {
private $basename = "";
public function __construct() {
$this->basename = basename(__FILE__);
}
}
Поскольку думать, что это был бы первый пример, возможно, каждый объект, созданный вами из этого класса, отличается! И определение класса похоже на план построения объекта, но если вы могли бы использовать функции в плане, вы могли бы каждый раз иметь другой план для создания объекта, так вот как работает ООП, и это не позволяет вам это делать!
Так что ваш пример не работает из-за того, что вы не можете использовать объект в определении класса. И решение для приведенного выше примера не работает для вас, потому что массив также статичен.
Таким образом, вы должны сделать массив «unstatic» и назначить объект массива в конструкторе, как это:
class A {
private $regions = array(
'NA' => "",
'EUW' => ""
// etc...
);
public function __construct() {
$this->regions["NA"] = new B();
$this->regions["EUW"] = new B();
}
}
Так что для конца, чтобы дать вам что-то хорошее, чтобы читать и от официальный источник см: http://php.net/manual/en/language.oop5.properties.php
И цитата из:
Они (свойства) определяется с помощью одной из ключевых общественных, защищенных или частных, а затем обычных переменных де Декларации в. Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.
Вы не можете сделать, потому что массив является статическим и в определении класса вы не можете использовать динамические значения как объекты или функции. – Rizier123
Итак, как вы это делаете? –
Один из способов состоит в том, чтобы иметь функцию init(), которая вызывается вашим «бутстрапом». или просто вызовите функцию init() в том же файле, который определяет класс после определения класса. –