PHP7: функция статического класса не может быть вызвана / увидена, пока класс не будет создан

У меня есть собственный класс под названием Error что я автозагрузка перед чем-либо еще. В моем собственном классе у меня есть конструктор и функция Getton типа singleton:

class Error
{
// Singleton object. Leave $me alone.
private static $me;

public $errors; // Array of errors
public $style;  // CSS rules to apply to error elements

private function __construct($style = "border:1px solid red;")
{
$this->errors = array();
$this->style = $style;
}

// Get Singleton object
public static function getError()
{
if(is_null(self::$me))
self::$me = new Error();

return self::$me;
}
//...
}

В своем мастер-включении я всегда готовил синглтон этого пользовательского класса перед основной логикой:

$Error = Error::getError();

Тем не менее, в PHP 7 это теперь дает мне ошибку:

Неустранимая ошибка: необработанная ошибка: вызов неопределенного метода
Ошибка :: GetError ()

Можете ли вы помочь мне понять, почему это больше не работает? Я попробовал это вместо этого, чтобы проверить, загружается ли класс Error вообще, и он работает (и вызывает конструктор):

$Error = new Error();

Каким-то образом я не могу вызвать функцию статического класса, если я не создал этот класс. Это сломает много другой логики, которую я имею, если это действительно изменение в php7.

2

Решение

Начиная с PHP 7, PHP включает в себя встроенный Error класс, который, кажется, находится в конфликте с вашим приложением Error учебный класс.

Предопределенный PHP Error учебный класс

Если класс вашего собственного приложения не определен в пользовательском пространстве имен, и вы пытаетесь вызвать Error::getError(), PHP будет предполагать, что вы имеете в виду встроенный класс, который не имеет определенного getError() метод. (У него есть похожий getMessage() нестатический метод).

Вы можете обойти это, добавив кастом namespace к вашему приложению, которое в любом случае является рекомендуемой практикой. Или, если ваше приложение не требует продолжения работы под PHP 5.x, рассмотрите возможность его рефакторинга для использования встроенного Error функциональность класса вместо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]