クラス継承の問題

WBOY
リリース: 2016-06-23 13:55:23
オリジナル
1150 人が閲覧しました

今日は興味深い問題に遭遇したので、コードに直接アクセスしました
親クラスと子クラスがあります
FatherClass.php:

class father{	public $a;	function __construct(){		$this->a = 3;	}}
ログイン後にコピー

Son.php:
include 'fatherClass.php';$son = new son();$son -> sonFun();class son extends father{	function sonFun(){		echo 222;	}}
ログイン後にコピー

Son.php を実行すると、エラーが報告されます問題は、クラスの息子が見つからないことです。
1. Son が親クラスから継承する「extends Father」を削除すると、正しく実行されます。
2. FatherClass の内容が include ステートメントに直接置き換えられた場合、正しく実行されます。
3.は以下のように書かれていれば、正しく実行されます
rreee
誰が説明できるでしょうか?


ディスカッションへの返信 (解決策)

父親クラスの名前を Fatherclass から Father に変更します

include 'father.php'

まず宣言してから使用してください例外として、クラスの定義と使用法が同じファイル内にある場合、定義と使用法は順不同です

こちら http://www.laruence.com/2008/08/24/427.html

php スクリプトはまずオペコードにコンパイルされ、次に実行されます

3 階の記事の著者は php の専門家のようです...ソースコードレベルの分析をいくつか見たことがありますが、彼のアバターには感銘を受けました
彼は説明しましたクラス継承のコンパイルメカニズムと多重継承のバグ。これにより、元の投稿者の最初の問題が解決されます。

2. FatherClass の内容が include ステートメントで直接置き換えられた場合、正しく実行されます
これは、つまり、次のことを意味します。 that include (require?xxxxxx_once?) は実行期間中にのみ実行され、コンパイル中には使用されません

要約すると、zend php スクリプトを読んだ後、継承されていないクリーンなクラスが見つかった場合は、最初にそれを作成します。 PHP の「クラス」ではなくアセンブリの「クラス」構造に近い)、継承されたクラスが見つかり、その親クラスがすでに存在する場合は、同じビルドと他のコードのコンパイルが続行されます。このとき、PHP スクリプトはオペコードになります。実行時、コードは他の PHP スクリプト (オペコード) の読み取り、複雑な継承クラスの確立などの順序で実行されます。また、アセンブリ コードの実行ステージではクラス定義がインテリジェントに識別されず、厳密に順序どおりにのみ実行されます。 PHPコードの。
私の考えが正しければ、元の投稿者の質問を説明できます

まず息子が来て、次に父親が来ます。それは常識に反しています


常識に従って行動しないのに、それはphpのバグだと言うのは、ちょっと言いすぎです
phpが複数のスキャンを実行して速度が低下する場合は、phpが遅すぎると言うべきです

私最初に息子を育て、次に老子を育てます。それは常識に反しています


常識に従わず、それをphpのバグだと言うなら、それは少し言い過ぎです
phpが複数のスキャンを実行して速度が低下する場合は、phpが遅すぎると言うべきです


代わりに。バグについては「人間味に欠ける」と説明した方が良いです
様々なデザインパターンに適応するには、コンパイル段階でもっと賢くなると良いと思いますよ〜
将来のphpバージョンでも、インテリジェントな完了と高いレベルが達成されるかもしれませんHTML構文インタープリターのような耐障害性
PHPはオペコードを提供します キャッシュ拡張機能は、複数行スキャンの字句解釈であるだけでなく、パフォーマンスを遅らせるコンパイルメカニズムの解決策でもあります~また、OOP内の複数のファイルによって引き起こされるディスクIOオーバーヘッドも排除します
わかりますか? php5 のバグです。解決したい場合は、3 のアドレスを参照してください。


プログラムコードについては、モデレーターの指示に従って、最初に説明してからオリジナルのコードを使用してください。

私は通常、コードを作成するときにインスタンス化して定義することはしませんが、SDK を実行するときにこの小さな問題を発見しました。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート