Почему нельзя вызвать статический метод у контекстной переменной, содержащей имя класса? Такое дело:classname = $classname;
}
protected function Test() {
return method_exists($this->classname, '__test') ? $this->classname::__test() : true; // unexpected "::" operator at this line.
}
protected function GetFilePath() {
return self::classFolder.str_replace('\\', DIRECTORY_SEPARATOR, $this->classname);
}
public static function Load($classname) {
$this = new self($classname);
$filepath = self::GetFilePath();
return file_exists($filepath) && include_once($filepath) && self::Test();
}
}

21 Авг 2019 в 07:02
207 +1
1
Ответы
1

Нельзя вызвать статический метод у контекстной переменной, содержащей имя класса, потому что в момент вызова статического метода необходимо указать имя класса явно, а не через переменную. Таким образом, использование -> или :: операторов с переменной, содержащей имя класса, не допускается в PHP.

В вашем примере, в методе Test(), вы пробуете вызвать статический метод __test() используя переменную $this->classname. Вместо этого, вы должны вызвать метод напрямую, указав имя класса явно, например:

return method_exists($this->classname, '__test') ? $this->classname::__test() : true;

следует заменить на:

$class = $this->classname;
return method_exists($class, '__test') ? $class::__test() : true;

Также, в методе GetFilePath() вы пытаетесь вызвать статический метод GetFilePath() с использованием self::, однако этот метод является нестатическим. Вместо этого, вы можете вызвать его через переменную $this:

$filepath = $this->GetFilePath();

Исправление этих проблем поможет вам исправить ошибки в вашем коде.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир