0

これは、グローバル スコープのコードです。

try {
    $Core = new Core;
} catch(Exception $e) {
    echo 'We\'re Sorry, but an error has occurred: <br /> '.$e. "\n";
}

function PP($Object){
    global $Core;
    echo '<pre>'.$Core->Tools()->DebugPrint($Object).'</pre>';
}

そして私は得る:

オブジェクト以外でメンバー関数 Tools() を呼び出す

これは意味がありません。PP関数がグローバル$Coreオブジェクトにアクセスできないのはなぜですか?

4

1 に答える 1

0

私は解決策を見つけました。

上記のソースは、ブラウザに直接ロードされた index.php ファイルの内容全体です。確かにもっと多くのコードがありますが、上記のコードは完全にグローバル スコープにあります。また、他のコードはグローバル スコープで実行されないため、Core をオーバーライドできませんでした。

コア オブジェクト コンストラクターはアプリケーションの実行を開始し、他のメソッドを呼び出したり、クラスを自動ロードしたり、クラスを使用したりする他のコア メソッドを呼び出します。 、Core オブジェクトは、コンストラクターの実行が終了するまで null のままです (アプリケーションが完全に終了した場合にのみ発生します)。この問題の修正は、Core クラスのすべての初期化をコンストラクターから init() メソッドに移動することでした。

これにより、(空のコンストラクターを使用して) Core を完全に作成できるため、関数が実行しようとしたときに変数は null ではなく、Init() のスコープ内になり、__construct() 内ではなくなります。

新しいコード:

try{
   $Core = new Core;
   $Core->Init();
}
catch(Exception $e){
   echo 'We\'re Sorry, but an error has occured: <br /> '. $e. "\n";
}


function PP($Object){
   global $Core;
   echo '<pre>'.$Core->Tools()->DebugPrint($Object).'</pre>';
}
于 2013-08-31T13:56:19.933 に答える