ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるthis、self、parentの3つのキーワードのインスタンスの使い方を詳しく解説

PHPにおけるthis、self、parentの3つのキーワードのインスタンスの使い方を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-08 10:10:231110ブラウズ

まず、上記の 3 つのキーワードを理解しましょう。これ、自分、親、文字通り理解しやすいのは、これ、自分、父親、ははは、そのほうが楽しいです。最初にいくつかの概念を確立しましょう。これら 3 つのキー単語 単語はどこで使われていますか? これは現在のオブジェクトへのポインター (C でポインターを使用して見てみましょう)、self は現在のクラスへのポインター、parent は親クラスへのポインターであることを簡単に説明しましょう。これを表現するのにこれ以上適した言語はないので、私たちはよくポインタを使います。笑、私は中国語をよく勉強していませんでした。 -_-#

これだけではわかりにくいので、実例をもとにお話していきます。
(1) これ

コードは次のとおりです:

<?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  
 //第二次实例化对象  
 $nameObject = new UserName( "PHP" );  
 //执行打印  
 $nameObject->printName(); //输出:PHP  
 ?>


上記のクラスがこのポインタを row と row でそれぞれ使用していることがわかります。そのとき、これは誰を指しているのでしょうか?実際、これは、オブジェクトをインスタンス化するときに誰を指すかを決定します。たとえば、オブジェクトが初めてインスタンス化されるとき (行)、これは $nameObject オブジェクト を指します。その後、行を出力するときは、print( $ this->24cc0b3905ef23111a2c37f173cf70afname ) になると、当然 "heiyeluren" が出力されます。 2 番目のインスタンスでは、 print( $this->name ) は print( $nameObject->name ) になるため、「PHP」が出力されます。したがって、これは現在のオブジェクト インスタンスへのポインターであり、他のオブジェクトやクラスを指すものではありません。
(2)self
まず、self がクラス自体を指すこと、つまり self はインスタンス化されたオブジェクトを指すものではないことを明確にする必要があります。一般に、self はクラス内の静的変数を指すために使用されます。

コードは次のとおりです:

<?php  
     class Counter  
     {  
         //定义属性,包括一个静态变量  
         private static $firstCount = ;  
         private $lastCount;  
         //构造函数  
         function construct()  
         {  
              $this->lastCount = ++selft::$firstCount; //使用self来调用静态变量,使用self调用必须使用::(域
运算符
号)  
         }  
         //打印最次数值  
         function printLastCount()  
         {  
              print( $this->lastCount );  
         }   
     }  
 //实例化对象  
 $countObject = new Counter();  
 $countObject->printLastCount(); //输出   
 ?>

ここで注意する必要があるのは、1 行目と 2 行目の 2 か所だけです。 2 行目で静的変数 $firstCount を、operator の初期値で定義しました。このとき呼び出すのは、クラス自体によって定義された静的変数 $frestCount です。この静的変数は、クラス自体のインスタンスとは何の関係もありません。オブジェクトに続く場合、それはクラスにのみ関連します。クラス自体を呼び出すと、これを使用できません。参照するには、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", "");  
 //执行打印  
 $personObject->printPerson(); //输出:heiyeluren is male,this year   
 ?>

これらのいくつかの詳細に注意します: メンバー属性、特に親クラスの属性はすべてパブリックであり、継承されたクラスがこれを介してアクセスできます。このとき、重要な点である line:parent::construct( "heiyeluren" ) に注目します。このとき、親クラスのメンバーはすべて親クラスであるため、parent を使用して親クラスのコンストラクターを呼び出します。 public なので、これを直接使用して継承されたクラスを呼び出すことができます。
概要:
this はオブジェクト インスタンスへのポインター、self はクラス自体への参照、parent は親クラスへの参照です。

以上がPHPにおけるthis、self、parentの3つのキーワードのインスタンスの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。