なぜ、このような問題があるのでしょうか?次のコードの一部からは、通り:
1 クラス2 { 3 // パブリック静的$名= 'wangyumeidsb'; 4 5 パブリック$名 = 'woaini' ; 6 7 パブリック静的関数のfoo() 8 { 9 エコー__CLASS__ 。 10 } 11 12 公的機能テスト() 13 { 14 自己:: のfoo(); 15 エコー「---」。 16 $この - > のfoo(); 17 エコー '<時間>' ; 18 // エコー'これは<BR>ある' "\ n"は。 19 } 20 21 パブリック 関数は、()と言う 22 { 23 エコー '我是非静态方法' 。 24 } 25 } 26 27 クラス Bは延び28 { 29 パブリック関数() 30 { 31 A :: テスト(); 32 A :: のfoo(); 33は// ::の$名をエコー。34 エコー $この - >名前; // 35 親:: テスト(); 36 セルフ:: テスト(); 37 $この - >テストは(); // セルフは、静的、非静的に呼び出すことができます呼び出す必要はありませんか? 38である } 39 } 40 41がある // 言う:: A(); 42がある の$ B = 新しい新しい; B 43は $ B - > (); 44がある // エコー$ B->名'非静的プロパティこのIS' .. '<BR>'; 45 // A :: $名エコー; 46は 、エコー '>>>>>>>>>>>>>>>>' ; 新しい新しいA; 48 $のA - > テスト(); 49 $ A - > のfoo(); 50 A :: fooの(); 51は 52である 。// ::テスト(); //クラスの外:スタティックアクセスモードあなたは、非静的メソッドにアクセスすることはできません。。。しかし、フィリピンのスタティックアクセスメソッドは静的メソッドにアクセスすることができます。。。
私はいくつかの質問に記載されています:
- このように、非静的メソッドのテストにアクセスするために();なぜ::テスト()を使用することができますか?
- 自己::テスト(); Bは、試験方法Aを継承するが、しかしこの方法でもアクセスすることができ、なぜテストは、すべてのグループに分類されていない、静的な方法ではありませんか?自己がまだ静的メンバにアクセスする必要はありません、あなたはまた、非静的アクセスすることができますか?それは自己であるためにポイントは何?
説明マニュアル :静的プロパティは、クラスがアクセス(ただし、静的メソッド)にオブジェクトをインスタンス化されることはできません。他のすべてのPHP静的変数と同様に、静的プロパティは、式のみを使用することはできません、テキストまたは定数に初期化することができます。静的プロパティが初期化または整数配列ではなく、別の変数や関数の戻り値を初期化することができ、あなたがオブジェクトを指すことはできません。
静的プロパティを呼び出すために、-------- $ fooの:: $名を使用することができ、以前に未知のアクセス方法のマニュアルで参照してください。$ fooがオブジェクトああです!
クラスFooの { パブリック 静的の $名 = 'SOジョージア' ; 公共の 機能_fooは、() { エコーセルフ:: $名を; } } $ fooという = 新しい新しいはFoo; プリント $ fooの :: $名; $ fooという :: _のfoo(); // 呼び出しは、出力値をすることができます,,が、E_STRICTレベルのエラーに報告されます,,プログラムの実行を終了しません。。 FOO $ - > _ FOO();
::私は$ A->は非静的アクセスと呼ばれ、スタティックアクセスモードと呼ばれます。以下は、理解されています。
要約:のような外部において、非静的メソッドにアクセスすることができない静的メソッドにアクセスすることができ、静的アクセス方法(行うことができるが、静的アプローチと非静的メソッド呼び出しがにつながるE_STRICT
、非静的アクセスモードの両方スタティックアクセスエラーのレベル。)方法、および非静的メソッドにアクセスすることができます。
スタティックアクセス方式は、非静的プロパティにアクセスすることができない、静的プロパティにアクセスすることができ、非静的アクセス方法は、非静的プロパティにアクセスするために、静的プロパティにアクセスすることはできません。
クラス内に、スタティックアクセス方法は、静的メソッドとアクセスすることができ、非静的メソッドの両方にアクセスすることができ、非静的アクセス方式が静的メソッドとアクセスすることができ、非静的メソッドの両方にアクセスすることができます。
スタティックアクセス方式は、非静的プロパティにアクセスしない、唯一の静的プロパティにアクセスすることができ、非静的アクセス方法は、非静的プロパティにアクセスするために、静的プロパティにアクセスすることはできません。