2017-10-08 43 views
2

我有一个自定义类称为Error,我自动加载之前的任何其他。在我的自定义类,我有一个构造函数和一个单身Get函数是这样的:PHP7:静态类功能无法调用/看到,直到类实例

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这是现在给我的错误:

Fatal error: Uncaught Error: Call to undefined method Error::getError()

你能帮我明白为什么不工作了?我试过这个,而不是检查Error类是否被加载在所有,它的工作(并调用构造函数):

$Error = new Error(); 

不知怎的,我不能调用静态类的功能,除非我有实例化了这个类。如果这真的是php7的改变,这将打破我拥有的许多其他逻辑。

+2

PHP7有一个内置的'Error'类。您可能遇到命名空间错误。您的'Error'类是否存在于自定义命名空间中? http://php.net/manual/en/class.error.php –

+0

如果您可以永久升级到PHP 7(您的代码不再需要在5.x下运行),也许您可​​以采用内部'错误'类代替你自己的。 –

+0

@MichaelBerkowski谢谢,这似乎是最可能的原因,多么不幸的冲突。幸运的是,这对我来说很简单,因为只有一个地方为我的Error类调用静态初始化函数。我会检查这是否是原因。随意添加“内置”命名空间评论作为答案。如果这让我解决了这个问题,我会标记它。 – Tiago

回答

1

从PHP 7开始,PHP包含一个内置的Error类,它看起来与您的应用程序的类Error有冲突。

PHP pre-defined Error class

如果你自己的应用程序的类的是不是一个自定义命名空间中定义的,你尝试呼叫Error::getError(),PHP会认为你的意思是内置在其中没有定义的getError()方法类。 (它有一个类似的非静态方法getMessage())。

你可以通过adding a custom namespace来解决这个问题,无论如何这是一个推荐的做法。或者,如果您的应用程序不需要在PHP 5.x下继续运行,请考虑重构它以改为使用内置的Error类功能。

相关问题