PHP には、バージョン 5 以降、ほとんどの オブジェクト指向 言語機能が備わっています。ここでは、主に、this、self、parent の 3 つのキーワードについて説明します。これらは文字通りに理解しやすいものです。まず、いくつかの概念を確立しましょう。これらの 3 つのキーワードはどこで使用されますか? これが現在のオブジェクトへのポインターであることを簡単に説明しましょう (C のポインターを使用して見てみましょう)。 self は現在のクラスへのポインタ、parent は親クラスへのポインタです。
以下は例を通して説明します。
(1) this
<?php class UserName { //定义属性 private $name; //定义构造函数 function construct( $name ){ $this->name = $name; //这里已经使用了this指针 } //析构函数 function destruct(){} //打印用户名成员函数 function printName(){ print( $this->name ); //又使用了this指针 } } //实例化对象 $nameObject = new UserName( "heiyeluren" ); //执行打印 $nameObject->printName(); //输出: heiyeluren //第二次实例化对象 $nameObject2 = new UserName( "PHP5" ); //执行打印 $nameObject2->printName(); //输出:PHP5 ?>
上のクラスがそれぞれ 11 行目と 20 行目でこのポインタを使用していることを見てみましょう。では、その時点でこれは誰を指しているのでしょうか?実際、これはインスタンス化するときに誰を指すかを決定します。たとえば、オブジェクトが初めてインスタンス化されるとき (25 行目)、これは $nameObject オブジェクト を指します。その後、18 行目で出力されます。 print($this->
(2)self
まず第一に、self がクラス自体を指していること、つまり self はインスタンス化されたオブジェクトを指していないことを明確にする必要があります。一般に、self は、クラス内の静的変数を指すために使用されます。クラス。
<?php class Counter { //定义属性,包括一个静态变量 private static $firstCount = 0; private $lastCount; //构造函数 function construct(){ $this->lastCount = ++selft::$firstCount; //使用self来调用静态变量,使用self调用必须使用::(域运算符号) } //打印最次数值 function printLastCount(){ print( $this->lastCount ); } } //实例化对象 $countObject = new Counter(); $countObject->printLastCount(); //输出 1 ?>
ここで注意する必要があるのは、6 行目と 12 行目の 2 か所だけです。 2 行目で静的変数 $firstCount を定義し、初期値は 0 です。次に、12 行目でこの値を呼び出し、self を使用して呼び出し、中間に「::」を使用して接続します。ドメイン演算子を呼び出すと、この時点で呼び出すのはクラス自体によって定義された静的変数 $frestCount です。静的変数は次のオブジェクトのインスタンスとは関係がなく、クラスにのみ関連します。クラス自体の場合、this を使用して参照することはできません。self はクラス自体を指しており、オブジェクト インスタンスとは何の関係もないため、self を使用して参照できます。言い換えれば、クラスに静的メンバーがある場合は、それらを呼び出すために self も使用する必要があります。
(3)parent
一般に、parent は親クラスへのポインタであることがわかっています。親クラスのコンストラクタを呼び出すには、parent を使用します。
<?php //基类 class Animal { //基类的属性 public $name; //名字 //基类的构造函数 public function construct( $name ){ $this->name = $name; } } //派生类 class Person extends Animal //Person类继承了Animal类 { public $personSex; //性别 public $personAge; //年龄 //继承类的构造函数 function construct( $personSex, $personAge ){ parent::construct( "heiyeluren" ); //使用parent调用了父类的构造函数 $this->personSex = $personSex; $this->personAge = $personAge; } function printPerson(){ print( $this->name. " is " .$this->personSex. ",this year " .$this->personAge ); } } //实例化Person对象 $personObject = new Person( "male", "21"); //执行打印 $personObject->printPerson(); //输出:heiyeluren is male,this year 21 ?>
私たちは次の詳細に注意を払っています: メンバー属性、特に親クラスの属性はすべてパブリックであり、継承されたクラスがこれを通じてアクセスできます。重要な点である 25 行目:parent::construct( "heiyeluren" ) に注目してください。このとき、親クラスのメンバーは次のとおりであるため、parent を使用して親クラスのコンストラクターを呼び出し、親クラスを初期化します。すべて public なので、これを直接使用して継承されたクラスを呼び出すことができます。