php5 での this、self、およびparentキーワードの使用法を理解する

WBOY
リリース: 2016-07-25 09:04:31
オリジナル
1045 人が閲覧しました
  1. class UserName

  2. {
  3. //属性を定義する
  4. private $name;
  5. //コンストラクターを定義する
  6. function __construct( $name ){
  7. $this->name = $name; //このポインタはここで使用されています
  8. }

  9. //デストラクタ

  10. function __destruct(){}
  11. //ユーザー名を出力するメンバー関数
  12. function printName(){
  13. print( $this->name ); // this ポインターが再度使用されます
  14. }
  15. }

  16. // インスタンス化されたオブジェクト

  17. $nameObject = new UserName( "heiyeluren" );
  18. // 実行print
  19. $nameObject->printName(); //出力: heiyeluren
  20. //オブジェクトの 2 番目のインスタンス化
  21. $nameObject2 = new UserName( "PHP5" );
  22. //印刷を実行します
  23. $nameObject2-> ;printName() ; //出力: PHP5
  24. ?>
コードをコピー

上記のクラスはそれぞれ 11 行目と 20 行目でこのポインターを使用していますが、このときこれは誰を指しているのでしょうか? ? 実際、これはオブジェクトをインスタンス化するときに誰を指すかを決定します。たとえば、オブジェクトが初めてインスタンス化されるとき (25 行目)、this は $nameObject オブジェクトを指します。その後、18 行目で print( $this. ->name ) を実行すると、当然 "heiyeluren" が出力されます。 2 番目の例では、 print( $this->name ) が print( $nameObject2->name ) になるため、「PHP5」が出力されます。したがって、これは現在のオブジェクト インスタンスへのポインターであり、他のオブジェクトやクラスを指すものではありません。

(2)自分 まず、self がクラス自体を指していることを明確にしてください。つまり、self はインスタンス化されたオブジェクトを指していないのです。一般に、self はクラス内の静的変数を指すために使用されます。

  1. class Counter
  2. {
  3. //静的変数を含む属性を定義します
  4. private static $firstCount = 0;
  5. private $lastCount;

  6. < ;p>//コンストラクター関数
  7. function __construct(){
  8. $this->lastCount = ++selft::$firstCount; //self を呼び出すときは、次を使用する必要があります:: (フィールド操作)シンボル)
  9. }

  10. //最後のカウント値を出力します

  11. function printLastCount(){
  12. print( $this->lastCount );
  13. }
  14. }

  15. < p>/ / /オブジェクトをインスタンス化します
  16. $countObject = new Counter();
  17. $countObject->printLastCount(); //1を出力します
  18. ?>

コードをコピーします

6 行目と 12 行目の 2 つの場所に注目してください。 静的変数 $firstCount が 2 行目で定義されており、初期値は 0 です。 次に、この値が 12 行目で呼び出され、self を使用して呼び出し、中間で接続するために "::" を使用します。このときに呼び出されるのは、クラス自体によって定義された静的変数 $frestCount であり、次のオブジェクトのインスタンスとは関係がありません。クラス自体を呼び出す場合、this を使用して参照することはできません。self はクラス自体を指しており、オブジェクト インスタンスとは何の関係もありません。 つまり、クラス内で静的メンバーを使用する場合は、self を使用してそれを呼び出す必要もあります。

(3)、親 parent は親クラスへのポインタであり、parent は通常、親クラスのコンストラクタを呼び出すために使用されることがわかっています。

  1. //基本クラス

  2. class Animal
  3. {
  4. //基本クラスの属性
  5. public $name //名前
  6. //基本クラスのコンストラクター
  7. public function __construct( $name ){
  8. $this->name = $name;
  9. }
  10. }

  11. //派生クラス

  12. class personがAnimalを拡張 //personクラスがAnimalクラスを継承します
  13. {
  14. public $personSex; //Gender
  15. public $personAge; //Age
  16. //継承されたクラスのコンストラクター
  17. function __construct( $personSex, $personAge ){
  18. parent::__construct( "heiyeluren" );親クラスのコンストラクター
  19. $this->personSex = $personSex;
  20. $this->personAge = $personAge;
  21. }
  22. function printperson(){
  23. print( $this->name. " は " です。 $this->personSex. ",this year " .$this->personAge );
  24. }
  25. }

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

  27. $personObject = new Person( "male ", "21");
  28. //印刷を実行します
  29. $personObject->printperson(); //出力: heiyeluren は男性、今年は 21 歳です
  30. ?>

コードをコピー

細部への注意: メンバー属性、特に親クラスの属性はすべてパブリックであり、継承されたクラスがこれを通じてアクセスできます。 重要な点に注意してください。 25 行目:parent::__construct( "heiyeluren" )、次に、parent を使用して親クラスのコンストラクターを呼び出し、親クラスを初期化します。これは、親クラスのメンバーがすべてパブリックであるため、継承できるためです。これを直接使用します。呼び出すクラス。



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