【发布时间】:2023-03-04 10:53:01
【问题描述】:
我有一个名为Error 的自定义类,我会先自动加载它。在我的自定义类中,我有一个构造函数和一个像这样的单例 Get 函数:
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;
}
//...
}
在我的master include中,我总是在核心逻辑之前准备了这个自定义类的单例:
$Error = Error::getError();
然而,在 PHP 7 中,这给了我一个错误:
致命错误:未捕获的错误:调用未定义的方法 错误::getError()
你能帮我理解为什么这不再起作用了吗?我已经尝试过这个来检查是否正在加载 Error 类,它确实有效(并调用了构造函数):
$Error = new Error();
除非我实例化了这个类,否则我无法调用静态类函数。如果这真的是 php7 的变化,这将打破我的许多其他逻辑。
【问题讨论】:
-
PHP7 有一个内置的
Error类。您可能遇到命名空间错误。您的Error类是否存在于自定义命名空间中? php.net/manual/en/class.error.php -
如果您能够永久升级到 PHP 7(您的代码不再需要在 5.x 下运行),也许您可以采用内部的
Error类来代替您自己的。 -
@MichaelBerkowski 谢谢,这似乎是最可能的原因,多么不幸的冲突。幸运的是,这对我来说很容易过去,因为只有一个地方为我的 Error 类调用了静态初始化函数。我会检查是否是这个原因。随意添加“内置”命名空间注释作为答案。如果这让我解决问题,我会标记它。
-
@MichaelBerkowski 很高兴确认您 100% 正确。它与 PHP 7 中的内置 Error 类发生冲突。小的重构解决了这个问题,应用程序的其余部分现在在我的 PHP 7 环境中运行。谢谢!
标签: php oop php-7 spl-autoload-register php-7.2