私は何かの前に自動ロードするError
というカスタムクラスを持っています。私のカスタムクラスでは、私はコンストラクタとシングルトンを持っている。このような関数を取得:私のマスターで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 = new Error();
どういうわけか、私はクラスの静的関数を呼び出すことはできませんこのクラスをインスタンス化しました。これは本当にphp7の変更であれば、これは私が持っている他の多くのロジックを破ります。
PHP7には、組み込みの 'Error'クラスがあります。おそらく名前空間エラーが発生しています。あなたの 'Error'クラスはカスタム名前空間に存在しますか? http://php.net/manual/en/class.error.php –
あなたが永久にPHP 7にアップグレードする立場にある場合(あなたのコードは5.xで動作する必要がなくなりました)、おそらく内部的なあなた自身の代わりに 'Error'クラス。 –
@MichaelBerkowskiありがとう、それは最も有望な原因、どのような不幸な衝突と思われる。幸運にも、過去の作業は簡単です。私のErrorクラスの静的な初期化関数を呼び出す場所は1つだけなので、これは簡単です。これが原因であるかどうかを確認します。答えとして「組み込みの」名前空間コメントを自由に追加してください。これで問題を解決しようとすれば、それをマークします。 – Tiago