PHP5 はオブジェクト指向言語のほとんどの機能を備えた言語です。PHP4 よりも多くのオブジェクト指向機能を備えていますが、いくつかの概念が少しわかりにくいので、今日はそれについて説明します。 (この記事を読むには、PHP5 のオブジェクト指向の知識が必要です)
まず、this、self、parent という 3 つのキーワードを理解してください。これに、self、father、haha、それはもっと楽しいです。まず、これら 3 つのキーワードがどこで使用されるかを簡単に説明しましょう (C のポインターを使用して見てみましょう)。 it)、self は現在のオブジェクトへのポインタ、parent は親クラスへのポインタです。これを表現するのにこれ以上適した言語はないので、私たちはよくポインタを使います。笑、私は中国語をよく勉強していませんでした。 -_-#
このようによくわからないという方は、実例をもとにお話しましょう。
(1) この
1 <?php
2
3 クラスのユーザー名
4 {
5 //属性を定義する
6 プライベート $name;
7
8 //コンストラクターを定義
9 関数 __construct( $name )
10 {
11 $this->name = $name //このポインタはここで使用されています。
12}
13
14 //デストラクター
15 関数 __destruct(){}
16
17 //ユーザー名を表示するメンバー関数
18 関数 printName()
19 {
20 print($this->name); //このポインタは再び使用されます。
21 }
22 }
23
24 //オブジェクトをインスタンス化する
25 $nameObject = 新しいユーザー名( "heiyeluren" );
26
27 //印刷を実行する
28 $nameObject->printName() //出力: heiyeluren;
29
30 //オブジェクトの 2 番目のインスタンス化
31 $nameObject2 = 新しいユーザー名( "PHP5" );
32
33 //印刷を実行する
34 $nameObject2->printName() //出力: PHP5
35 ?>
上記のクラスがそれぞれ 11 行目と 20 行目でこのポインタを使用していることを見てみましょう。そのとき、これは誰を指しているのでしょうか?実際、これはオブジェクトをインスタンス化するときに誰を指すかを決定します。たとえば、オブジェクトが初めてインスタンス化されるとき (25 行目)、this は $nameObject オブジェクトを指します。その後、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 //コンストラクター
10 関数__construct()
11 {
12 $this->lastCount = ++selft::$firstCount; //self を使用して静的変数を呼び出すときは、:: (フィールド操作シンボル) を使用する必要があります。
13}
14
15 //最新の値を出力します
16 関数 printLastCount()
17 {
18 print( $this->lastCount );
19}
20}
21
22 //オブジェクトをインスタンス化する
23 $countObject = 新しいカウンター();
24
25 $countObject->printLastCount() //出力 1
26
27 ?>
ここで注意する必要があるのは、6 行目と 12 行目の 2 か所だけです。 2 行目で静的変数 $firstCount を定義し、初期値は 0 です。次に、12 行目でこの値を呼び出し、self を使用して呼び出し、途中で接続するために "::" を使用しました。ドメイン演算子を呼び出すと、この時点で呼び出すのはクラス自体によって定義された静的変数 $frestCount です。静的変数は次のオブジェクトのインスタンスとは関係がなく、クラスにのみ関連します。クラス自体の場合、this を使用して参照することはできません。self はクラス自体を指しており、オブジェクト インスタンスとは何の関係もないため、self を使用して参照できます。言い換えれば、クラスに静的メンバーがある場合は、それらを呼び出すために self も使用する必要があります。
(3)parentparent は
親クラスへのポインタであることがわかっています。通常、parent を使用して親クラスのコンストラクタを呼び出します。
1 <?php
2
3 //基本クラス
4クラス動物
5 {
6 //基本クラスの属性
7 パブリック $name //名前;
8
9 //基本クラスのコンストラクター
10 パブリック関数 __construct( $name )
11 {
12 $this->name = $name;
13}
14}
15
16 // 派生クラス
17 クラス person は Animal を拡張します //person クラスは Animal クラスを継承します
18 {
19 public $personSex; //性別
20 public $personAge //年齢;
21
22 //継承クラスのコンストラクター
23 関数 __construct( $personSex, $personAge )
24 {
25parent::__construct( "heiyeluren" ); //parent を使用して親クラスのコンストラクターを呼び出します。
26 $this->personSex = $personSex;
27 $this->personAge = $personAge;
28 }
29
30 関数 printperson()
31 {
32 print( $this->name. " は " .$this->personSex. "、今年は " .$this->personAge );
33}
34}
35
36 //人物オブジェクトをインスタンス化する
37 $personObject = 新しい人物( "男性", "21");
38
39 //印刷を実行する
40 $personObject->printperson(); //出力: heiyeluren は男性、今年 21 歳
41
42?>
次の詳細に注意します。メンバー属性、特に親クラスの属性はすべてパブリックであり、継承されたクラスがこれを通じてアクセスできます。重要な点である 25 行目:parent::__construct( "heiyeluren" ) に注目してください。このとき、親クラスのメンバーは次のとおりであるため、parent を使用して親クラスのコンストラクターを呼び出し、親クラスを初期化します。すべて public なので、これを直接使用して継承されたクラスを呼び出すことができます。
概要:
これはオブジェクト インスタンスへのポインタ、self はクラス自体への参照、parent は親クラスへの参照です。
基本的に、私が知っているのはこれだけです。いくつかの誤解があるはずです。ご指摘ください。
私の電子メール: [email protected]
書き込み時間: 2004-11-3 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html