ホームページ  >  記事  >  バックエンド開発  >  PHP 知識 1: this、self、parent の 3 つのキーワードの違い [転送]

PHP 知識 1: this、self、parent の 3 つのキーワードの違い [転送]

WBOY
WBOYオリジナル
2016-06-13 13:12:341066ブラウズ

PHP 理解のパート 1: this、self、parent の 3 つのキーワードの違い [転送]

転載元: http://hi.baidu.com/sneidar/blog/item/4c0015ecd4da9d38269791d3.html

?

PHP5 は、オブジェクト指向言語のほとんどの機能を備えた言語です。PHP4 よりも多くのオブジェクト指向機能を備えていますが、ここで主に説明しているのは、いくつかの概念です。 この、self、parentという3つのキーワードの違い。これ、私、父をそれぞれ参照すると、文字通り理解するのが簡単です。まず、これら 3 つのキーワードは何に使用されるのかをいくつか説明します。 場所はどこですか?

  • これは現在のオブジェクトへのポインターです (C のポインターを見てみましょう)
  • self は現在のクラスへのポインタです。
  • parent は親クラスへのポインタです

これを表現するのにこれより適切な言語がないため、ここでの説明にはポインタを頻繁に使用します。

?

1. これ: 現在のオブジェクト ポインター

 class UserName {
 	private $name;

 	function __construct($name){
 		$this->name = $name;
 	}

    function __destruct(){

    }

    function printName(){
    	print($this->name);
    }
 }

 $no1 = new UserName('thomas.chen');
 $no1->printName();
 print('<br/>');
 $no2 = new UserName('berry.chen');
 $no2->printName();

?

見てみましょう。上のクラスはそれぞれ 5 行目と 13 行目でこのポインタを使用しています。では、その時点でこれは誰を指しているのでしょうか?実際、これにより、オブジェクトが初めてインスタンス化されるときなど、インスタンス化の際に誰を指すかが決まります。 (17 行目)、これは $no1t オブジェクトを指しています。18 行目で印刷するときは、print( $this->name ) は print( $nameObject->name になります) ) とすると、もちろん「thomas.chen」が出力されます。 2 番目のインスタンスでは、 print( $this->name ) は print( $no2->name )、「berry.chen」が出力されます。したがって、これは現在のオブジェクト インスタンスへのポインターであり、他のオブジェクトやクラスを指すものではありません。

?

?

2. self: 現在のクラスポインタ

class Counter {
	private static $firstCount = 0;
	private $lastCount;

	function __construct() {
		$this->lastCount = ++self :: $firstCount;
	}

	function printLastCount(){
		print($this->lastCount);
	}
}

$c1 = new Counter();
$c1->printLastCount();
print('<br/>');
$c2 = new Counter();
$c2->printLastCount();

?

ここで注意する必要があるのは、2 行目と 6 行目の 2 か所だけです。 2 行目で静的変数 $firstCount を定義し、初期値は 0 で、6 行目でこの値を呼び出しました。 self を使って呼び出し、途中で接続するのに「::」を使います。これをドメイン演算子と呼びます。このとき呼び出すのは、クラス自体が定義した静的変数 $frestCount です。 私たちの静的変数は、次のオブジェクトのインスタンスとは何の関係もありません。クラス自体に関連付けられているだけなので、self が参照するために self を使用することはできません。オブジェクトとは異なり、クラス自体は無関係です。言い換えれば、クラスに静的メンバーがある場合は、それらを呼び出すために self も使用する必要があります。

?

?

3. 親: 親ポインタ。通常、親クラスのコンストラクターを呼び出すにはparentを使用します。

class Animal {
	public $name;

	function __construct($name){
		$this->name = $name;
	}

}

class Person extends Animal {
	public $sex;
	public $age;

	function __construct($name,$sex,$age){
		parent::__construct($name);
		$this->sex = $sex;
		$this->age = $age;
	}

	function printPerson(){
		print('[name:'.$this->name.', sex:'.$this->sex.', age:'.$this->age.']');
	}
}

$person = new Person('thomas.chen','Male','25');
$person->printPerson();

?

私たちは以下の詳細に注意を払っています: メンバー属性、特に親クラスの属性はすべてパブリックであり、継承されたクラスがこれを通じてアクセスできます。重要なポイントである 15 行目に注目します。 parent::__construct($name)、このとき、parent を使用して親クラスのコンストラクターを呼び出し、親クラスを初期化します。親クラスのメンバーはパブリックであるため、継承されたクラスで直接使用できます。 これを呼び出すために。

?

?

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