this、self、parent の 3 つのキーワードは、それぞれ this、self、father を指し、文字通り理解するのが簡単です。
this は現在のオブジェクトへのポインタです (C のポインタを見てみましょう)
self は現在のクラスへのポインタです
parent は親クラスへのポインタです (ここでの説明にはポインタを頻繁に使用します) , それを表現するのにこれ以上適切な言語はないので)
実際の例に基づいて見てみましょう
(1) this
1
2
3 class UserName
4 { {
11 $ this->name = $name; //このポインタはここで使用されています
12 }
13
14 //デストラクタ
15 function __destruct( ){}
16
17メンバー関数
関数 printName()
19 }
22 }
23
24 // オブジェクトをインスタンス化します
25 $nameObject = new UserName( "heiyeluren" );
26
27 //印刷を実行する
28 $name Object ->printName(); //出力: heiyeluren
29
30 //オブジェクトの 2 番目のインスタンス化
31 $nameObject2 = new UserName( "PHP5" );
32
33 //印刷を実行
34 $nameObject2->printName(); //出力: PHP5
35 ?>
上記のクラスがそれぞれ 11 行目と 20 行目でこのポインターを使用していることがわかります。では、この時点ではこれは誰を指していましたか?
実際、これは、オブジェクトを初めてインスタンス化するとき (25 行目)、
その後、オンラインで印刷するときに、それが誰を指すかを決定します。 18 を実行します print( $this->name ) を print( $nameObject->name ) に変更するだけで、当然 "heiyeluren" が出力されます。
2番目のインスタンスでは、print( $this- >name ) が print( $nameObject2->name ) になるため、「PHP5」が出力されます。
つまり、これは現在のオブジェクト インスタンスへのポインターであり、他のオブジェクトやクラスを指すものではありません。
(2)self
まず第一に、self がクラス自体を指していること、つまり self はインスタンス化されたオブジェクトを指していないことを明確にする必要があります。一般に、self は静的変数を指すために使用されます。クラスで。
1<?php
2
3クラスカウンター4 {
5//静的変数を含む属性を定義します
6プライベート静的$ firstcount = 0; 7 プライベート $lastCount;
8
9 $this->lastCount = ++selft::$firstCount; / / self を呼び出すときは、次を使用する必要があります。フィールド演算記号)
13 18
22 //オブジェクトをインスタンス化します
23 $countObject = new Counter() ;
24
25 $countObject->printLastCount(); //出力1
26
27 ?>
ここでは、6 行目と 12 行目の 2 か所に注意するだけで済みます。
2行目で静的変数$firstCountを定義し、初期値は0です。そして、12行目でこの値を呼び出し、selfを使って呼び出し、途中で「::」を使って接続しています
。 はドメイン演算子と呼ばれるもので、このときに呼び出すのはクラス自体によって定義された静的変数 $frestCount です。この静的変数は次のオブジェクトのインスタンスとは関係がなく、クラスにのみ関連します。 ,
次に、クラス自体を呼び出します。そうすると、thisを参照に使用することはできませんが、selfを参照に使用できます。
なぜなら、selfはクラス自体を指しており、オブジェクトインスタンスとは何の関係もないからです。言い換えれば、クラスに静的メンバーがある場合は、それらを呼び出すために self も使用する必要があります。
(3)parent
parent は親クラスへのポインタであることがわかっています。通常、parent を使用して親クラスのコンストラクターを呼び出します。 / /Name
8
9 // 基本クラスのコンストラクター
10 public function __construct( $name )
11 {
12 $this->name = $name; " // 性別
20 public $personAge; // 年齢
21
22 // 継承されたクラス
23のコンストラクター function __construct( $personSex, $personAge )
24 {
25 parent ::__construct( "heiyeluren" ); //親クラスのコンストラクターはparent
26 $this->personSex = $personSex;
27 $this->personAge = $personAge; を使用して呼び出されます。
28 }
29
30 function printperson()
31 {
32 print( $this->name. " は、今年は " .$this->personSex. " です". $this->personAge );
33 }
34 }
35
36 //人物オブジェクトをインスタンス化します
37 $personObject = new Person( "male", "21 ") ;
38
39 //印刷を実行
40 $personObject->printperson(); //出力:heiyelurenは男性、今年は21
41
42 ?>
私たちは次のいくつかの詳細に注意を払っています: メンバー属性、特に親クラスの属性はすべてパブリックであり、継承されたクラスがこれを通じてアクセスできます。
重要な点である 25 行目:parent::__construct( "heiyeluren" ) に注目します。この時点では、parent を使用して親クラスのコンストラクターを呼び出し、親クラスを初期化しています。 class メンバーはすべてパブリックなので、これを直接使用して継承されたクラスを呼び出すことができます。
概要:
this はオブジェクト インスタンスへのポインター、self はクラス自体への参照、parent は親クラスへの参照です。
転載元: http://blog.csdn.net/skynet001/article/details/7518164
上記では、PHP における this、self、parent の 3 つのキーワードの区別と比較を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。