2017-10-08 1 views
2

다른 클래스보다 먼저 자동로드하는 Error이라는 사용자 정의 클래스가 있습니다.PHP7 : 클래스가 인스턴스화 될 때까지 정적 클래스 함수를 호출하거나 볼 수 없습니다.

$Error = Error::getError(); 
: 내 마스터에서

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; 
    } 
    //... 
} 

난 항상 코어 로직 전에이 사용자 정의 클래스의 싱글을 준비했습니다 포함 : 내 사용자 정의 클래스에서,이 같은 생성자와 싱글 가져 오기 기능이

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

당신이 더 이상 작동하지 않는 이유를 내가 이해하는 데 도움이 :

그러나, PHP 7이 지금 나에게 오류를주고있다? 내가 대신 Error 클래스가 모두로드되고 있는지 여부를 확인하려면이 시도했습니다, 그리고 작업 수행 (생성자를 호출) : 나는했습니다 않는

$Error = new Error(); 

은 어떻게 든 내가 정적 클래스 함수를 호출 할 수 없습니다 이 클래스를 인스턴스화했습니다. 이것은 필자가 필자가 가지고있는 많은 논리를 깨뜨릴 것이다.

+2

PHP7에는 'Error' 클래스가 내장되어 있습니다. 아마도 네임 스페이스 오류가 발생했습니다. 'Error' 클래스가 커스텀 네임 스페이스에 존재합니까? http://php.net/manual/en/class.error.php –

+0

영구적으로 PHP 7로 업그레이드 할 수있는 위치에 있다면 (더 이상 코드를 5.x로 실행할 필요가 없습니다) 아마도 내부 코드 자신의 자리에있는'Error' 클래스. –

+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 클래스 기능을 대신 사용하도록 리팩터링하십시오.

관련 문제