Ваш код выглядит нормально. Если с этим что-то не так, я, должно быть, упускаю проблему. Похоже, что ваш вызов self :: полностью находится в пределах класса! И, в частности, статическая область видимости, для которой self ::. 1001 *
Из 3-го издания PHP Objects Patterns and Practice (потрясающая книга):
Для доступа к статическому методу или свойству из того же класса
(а не от ребенка), я бы использовал ключевое слово self. Я должен
Классы, что $ псевдо-переменная для объектов. Так что снаружи
класс StaticExample, я получаю доступ к свойству $ aNum, используя его класс
имя:
StaticExample::$aNum;
Внутри класса StaticExample я могу использовать ключевое слово self:
class StaticExample {`
static public $aNum = 0;
static public function sayHello() {
self::$aNum++;
print "hello (".self::$aNum.")\n";
}
}
Итак, я не уверен, почему этот код не работал. Возможно ошибка PHP? Я столкнулся с этой ошибкой, когда пытался использовать self :: вне области видимости - моя ошибка выглядела так:
public static function get_names() {
$machine_names = self::get_machine_names();
return array_map(function ($machine_name) {
$service_settings = self::get_settings_by_machine_name($machine_name);
return $service_settings . $machine_name;
},
$machine_names
);
}
Итак, я получаю ошибку, потому что я использую self :: в рамках замыкания. Чтобы исправить ошибку, я мог бы сделать этот вызов self :: get_settings_by_machine_name () перед закрытием и передать результаты в область замыкания с помощью use
.
Не уверен, что происходит в вашем коде.