今日は興味深い問題に遭遇したので、コードに直接アクセスしました
親クラスと子クラスがあります
FatherClass.php:
class father{ public $a; function __construct(){ $this->a = 3; }}
include 'fatherClass.php';$son = new son();$son -> sonFun();class son extends father{ function sonFun(){ echo 222; }}
父親クラスの名前を Fatherclass から Father に変更します
include 'father.php'
まず宣言してから使用してください例外として、クラスの定義と使用法が同じファイル内にある場合、定義と使用法は順不同です
php スクリプトはまずオペコードにコンパイルされ、次に実行されます
3 階の記事の著者は php の専門家のようです...ソースコードレベルの分析をいくつか見たことがありますが、彼のアバターには感銘を受けました
彼は説明しましたクラス継承のコンパイルメカニズムと多重継承のバグ。これにより、元の投稿者の最初の問題が解決されます。
2. FatherClass の内容が include ステートメントで直接置き換えられた場合、正しく実行されます
これは、つまり、次のことを意味します。 that include (require?xxxxxx_once?) は実行期間中にのみ実行され、コンパイル中には使用されません
要約すると、zend php スクリプトを読んだ後、継承されていないクリーンなクラスが見つかった場合は、最初にそれを作成します。 PHP の「クラス」ではなくアセンブリの「クラス」構造に近い)、継承されたクラスが見つかり、その親クラスがすでに存在する場合は、同じビルドと他のコードのコンパイルが続行されます。このとき、PHP スクリプトはオペコードになります。実行時、コードは他の PHP スクリプト (オペコード) の読み取り、複雑な継承クラスの確立などの順序で実行されます。また、アセンブリ コードの実行ステージではクラス定義がインテリジェントに識別されず、厳密に順序どおりにのみ実行されます。 PHPコードの。
私の考えが正しければ、元の投稿者の質問を説明できます
常識に従って行動しないのに、それはphpのバグだと言うのは、ちょっと言いすぎです
phpが複数のスキャンを実行して速度が低下する場合は、phpが遅すぎると言うべきです
私最初に息子を育て、次に老子を育てます。それは常識に反しています
常識に従わず、それをphpのバグだと言うなら、それは少し言い過ぎです
phpが複数のスキャンを実行して速度が低下する場合は、phpが遅すぎると言うべきです
プログラムコードについては、モデレーターの指示に従って、最初に説明してからオリジナルのコードを使用してください。