ホームページ > バックエンド開発 > PHPチュートリアル > PHPでのthis、self、parentの違いの説明

PHPでのthis、self、parentの違いの説明

WBOY
リリース: 2016-07-25 08:59:19
オリジナル
915 人が閲覧しました
  1. class name //name という名前のクラスを作成します

  2. {
  3. private $name //属性を定義します、private

  4. 初期化と代入のためのコンストラクター

  5. function __construct( $name )
  6. {
  7. $this->name = $name; //このポインターステートメントはここで使用されています①
  8. }

  9. < //デストラクター
  10. function __destruct(){}

  11. //ユーザー名メンバー関数を出力します

  12. function printname()
  13. {
  14. print( $this->name ); // このポインター ステートメントを再度使用します ②, echo出力を使用することもできます
  15. }
  16. }
  17. $obj1 = new name( "PBPHome" ); // オブジェクトステートメントをインスタンス化します ③

  18. // 印刷を実行します

  19. $obj1->printname() ; //出力: PBPHome
  20. echo "
    "; //出力: Enter

  21. //オブジェクトの 2 番目のインスタンス化

  22. $ obj2 = new name( "PHP" );< /p>
  23. //印刷を実行します

  24. $obj2->printname(); //出力: PHP
  25. ?>

コードをコピーします
例証します: thisポインタは文①と②で使われていますが、このときthisは誰を指しているのでしょうか? 実際、これは、オブジェクトを初めてインスタンス化するとき (ステートメント③)、その時点でステートメント②の print を実行するときに、これが誰を指すかを決定します。 , print( $this->

name ) すると、当然「PBPHome」が出力されます。 2 番目のインスタンスでは、 print( $this->name ) は print( $obj2->name ) になるため、「PHP」が出力されます。したがって、これは現在のオブジェクト インスタンスへのポインターであり、他のオブジェクトやクラスを指すものではありません。

self の使い方を見てみましょう。

Self はクラス自体を指します。つまり、self はインスタンス化されたオブジェクトを指しません。一般に、self はクラス内の静的変数を指すために使用されます。 クラスで静的メンバーを使用する場合 (通常はキーワード static を使用します)、それを呼び出すには self を使用する必要があります。 self を使用して静的変数を呼び出す場合は、:: (フィールド演算子記号) を使用する必要があることに注意してください。例を参照してください。

  1. class counter //カウンタークラスを定義する
  2. {
  3. //静的変数$firstCountを含む属性を定義し、初期値0を割り当てる ステートメント①
  4. private static $firstCount = 0;
  5. private $lastCount;

  6. //コンストラクター

  7. function __construct()
  8. {
  9. $this->lastCount = ++self::$firstCount; //使用self で静的変数ステートメントを呼び出す②
  10. }

  11. //lastCount 値を出力する

  12. function printLastCount()
  13. {
  14. print( $this->lastCount );
  15. }
  16. }< /p> ;
  17. //オブジェクトをインスタンス化します

  18. $obj = new Counter();

  19. $obj->printLastCount(); //ここで実行すると、プログラムは次のように出力します。 1

  20. ?>

コードをコピー

注: 発言①と発言②。ステートメント①で静的変数 $firstCount を定義し、ステートメント②でその値を self を使って呼び出します。このとき、クラス自身が定義した静的変数 $frestCount が呼び出されます。 静的変数は、後続のオブジェクトのインスタンスとは何の関係もありません。クラス自体を呼び出す場合、self はクラス自体を指しており、何も関係がないため、this を使用して参照することはできません。任意のオブジェクト インスタンス。 次に、先ほど使用した this は、インスタンス化されたオブジェクト $obj を呼び出します。

最後にparentの使い方を説明します。

Parent は親クラスへのポインターです。通常、parent は親クラスのコンストラクターを呼び出すために使用されます。

例:

  1. //基本クラスを作成します Animal
  2. class Animal
  3. {
  4. public $name //基本クラスの属性、name $name

  5. < ;p> ; //基本クラスのコンストラクター、初期化代入
  6. public function __construct( $name )
  7. {
  8. $this->name = $name;
  9. }
  10. }

  11. //定義派生クラス Person は Animal クラスから継承します

  12. class Person extends Animal
  13. {
  14. public $personSex; //派生クラスの属性 $personSex の性別と $personAge の年齢が新たに定義されます
  15. public $personAge;

  16. < ;p> //派生クラスのコンストラクタ
  17. function __construct( $personSex, $personAge )
  18. {
  19. parent::__construct( "PBPHome" ) //parent を使って親クラスのコンストラクタ文を呼び出す①
  20. $ this->personSex = $personSex;
  21. $this->personAge = $personAge;
  22. }

  23. //印刷に使用される派生クラスのメンバー関数、形式: name は name , 年齢は age

  24. function printperson()
  25. {
  26. print( $this->name. " は " .$this->personSex. ",age は " .$this->personAge );
  27. }
  28. }

  29. // Person オブジェクトをインスタンス化します

  30. $personObject = new Person( "male", "21");

  31. // 印刷を実行します

  32. $personObject- >printperson(); //出力結果: PBPHome は男性、年齢は 21 です

  33. ?>

使用方法も含まれているコードをコピーします

これの。 詳細: メンバー プロパティはすべてパブリック (パブリック プロパティとメソッド、クラス内外のコードからアクセス可能)、特に親クラスのプロパティはこれを介してアクセスします。 ポイントは①の文:parent::__construct( "heiyeluren" ) このとき、parentを使って親クラスのコンストラクタを呼び出し、親クラスを初期化します。 PBPホームという名前。別のオブジェクト $personObject1 をインスタンス化してテストできます。印刷後も、名前は PBPHome のままです。

概要: これはオブジェクト インスタンスへのポインタであり、インスタンス化時に決定されます。 self はクラス自体への参照であり、通常はクラス内の静的変数を指すために使用されます。 通常、parent は親クラスのコンストラクターを呼び出すために使用されます。

理論と例を組み合わせた上記の紹介で、この、自分、親という 3 つのキーワードについてはすでに深く理解できましたか? Programmer's Home の皆様の学習と進歩がますますご発展されることをお祈りしております。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート