У меня есть собственный класс под названием 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.
Начиная с PHP 7, PHP включает в себя встроенный Error
класс, который, кажется, находится в конфликте с вашим приложением Error
учебный класс.
Предопределенный PHP Error
учебный класс
Если класс вашего собственного приложения не определен в пользовательском пространстве имен, и вы пытаетесь вызвать Error::getError()
, PHP будет предполагать, что вы имеете в виду встроенный класс, который не имеет определенного getError()
метод. (У него есть похожий getMessage()
нестатический метод).
Вы можете обойти это, добавив кастом namespace
к вашему приложению, которое в любом случае является рекомендуемой практикой. Или, если ваше приложение не требует продолжения работы под PHP 5.x, рассмотрите возможность его рефакторинга для использования встроенного Error
функциональность класса вместо.
Других решений пока нет …