私は長い間 PHP に触れてきましたが、基本的なものを使用するときにまだ不確実で混乱を感じることがあります。オブジェクト指向には多くのことが含まれます。PHP の属性、オブジェクト、およびアクセス メソッド $this $parent self の使用シナリオを簡単にまとめてみましょう。
1. PHP クラスの属性定義とアクセス方法:
1
2 クラス testClass {
3 const tConst = 1;
4 public $tVar = 2; //または public $tVar の前に変数修飾子を付ける必要があります
5 静的 $tSta = 3;
6
7 パブリック関数 __construct(){
8 echo $this->tConst; //エラーなし、出力なし
9 echo self::tConst //正しい出力 1
10
11 echo $this->tVar; // tVar の前に $ 記号を置くことはできないことに注意してください
12 echo self::$tVar; // 宣言されていない静的プロパティへのアクセス: testClass::$tVar
13 echo self::tVar; // tVar、未定義のクラス定数 'tVar' の前に $ 記号を追加する必要があります
14
15 echo $this->tSta; //エラーなし、出力なし
16 echo self::$tSta; //正しい出力 3
17
18 }
19 }
20
21 $otestClass = 新しい testClass();
いくつかのポイントを要約すると:
オブジェクトをインスタンス化する場合 $otestClass = new testClass(); testClass() の () は省略できます。コンストラクターがパラメーターが必要であることを明示的に宣言する場合は、ここでパラメーターを渡す必要があります。
参照される変数またはメソッドが const (定数の定義) または static (静的宣言) として宣言されている場合は、演算子を使用する必要があります::
参照される変数またはメソッドが const または static として宣言されていない場合は、演算子を使用する必要があります ->
クラス内から const または static 変数またはメソッドにアクセスするには、自己参照 self を使用します
クラス内から const または static ではない変数またはメソッドにアクセスするには、自己参照 $this を使用します
2. $this-> はどこを指しますか?
1 クラス testClass {
2 var $nick = '';
3
4 パブリック関数 __construct($nick){
5 $this->nick = $nick;
6 }
7
8 パブリック関数 display(){
9 echo $this->nick;
10 }
11 }
12
13 $otestClass1 = 新しい testClass('frank');
14 $otestClass1->display(); //echo $otestClass1->nick; これと同じ結果になります
上記の例では、$this->display(); は実際には $otestClass1->nick であるため、$this が指す場所は、現在のオブジェクト インスタンスへのポインターであるインスタンス化されたオブジェクトによって決まります。これには変数とメソッドが含まれます
$this->method()の例:
1 クラスのbaseClass{
2 パブリック関数 testFunc(){
3 echo "n" ;
4 }
5 }
6
7 クラスのparentClass はbaseClassを拡張します{
8 パブリック関数 testFunc(){
9 echo "n" ;
10 }
11 }
12
13 クラス testClass はparentClass を拡張します{
14 var $nick = '';
15
16 パブリック関数 __construct($nick){
17 $this->ニック = $ニック;
18 }
19
20 パブリック関数の表示(){
21 echo $this->nick;
22 $this->testFunc();
23 }
24 }
25
26 $otestClass1 = 新しい testClass('frank');
27 $otestClass1->display();
このコードの最終出力は何ですか?重要なのは、testFunc() メソッドに注目することです。
クラス内で $this を使用して、現在のクラスに存在しないメソッドまたは変数を呼び出すと、親クラスが見つからなくなるまで順番に検索され、エラーが報告されます
最初のものに基づいて、必要なメソッドまたは変数が見つかった場合、検索は停止します。その上位の親クラスに同じものが存在する場合は、現在見つかったものが選択されます。
上記のコードの出力は次のようになります:
フランク
私が一番です
3. 親について::
parent は親クラスへの参照です
1
2 クラス A {
3 パブリック $a = 'aa';
4 パブリック関数 callFunc(){
5 echo '親';
6 }
7 }
8
9 クラス B は A を拡張します{
10 パブリック関数 __construct(){
11 親::callFunc();
12 echo "n" . $this->a;
13 }
14 }
15
16 $oB = 新しい B;
たとえば、上記のコードでは、クラス B で、その親クラス A の callFunc() メソッドを呼び出したい場合は、parent::callFunc() を使用する必要がありますが、クラス A のこのメソッドはパブリックに変更する必要がありますそれ以外の場合は、致命的なエラーが表示されます: コンテキスト 'B' からプライベート メソッド A::callfunc() を呼び出します...
もう 1 つ注意すべき点は、親クラスの属性 $a については、呼び出すときに $this を使用しますが、parent を使用してアクセスすることはできないことです。 $a がクラス A: public static $a で次のように定義されている場合、アクセスするときにparent::$a
が必要になります。
parent は推移的ではないことに注意してください。この例では、クラス A が基本クラスを継承し、基本クラスで baseFunc() メソッドを定義している場合、parent::baseFunc( を使用します。 ) クラス B では誤りであり、クラス A でのみ使用できます。
4. self:: はどこを指しますか?
簡単に言えば、self は特定のインスタンスとは何の関係もありません。現在のクラスを指すだけであり、特定のクラスのオブジェクトの影響を受けません。
1 クラス testClass{
2 パブリック静的 $count = 0;
3 パブリック $num = 0;
4
5 関数 __construct(){
6 self::$count++;
7 $this->num++;
8 }
9
10関数表示(){
11 エコー self::$count . "n";
12 echo $this->num . "n";
13 }
14 }
15
16 $oTest1 = 新しいテストクラス;
17 $oTest1->display() //出力: 1 1
;
18
19 $oTest2 = 新しいテストクラス;
20 $oTest2->display() //出力: 2 1
;
上記の例では、self::$cout は常にクラス自体を指しますが、$num は特定のインスタンスごとに個別に存在します。
5. 概要:
$this は現在のインスタンスを指します
$parentは親クラスへの参照です
self は現在のクラス自体への参照です
http://www.bkjia.com/PHPjc/926456.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/926456.html技術記事オブジェクト指向 php の簡単な概要 $this $parent self 私は長い間 php を使ってきましたが、いくつかの基本的なものを使用するときに、まだ不確実で混乱を感じることがあります。オブジェクト指向...