ホームページ >php教程 >php手册 >PHP5 の this、self、parent キーワードに関する詳細なチュートリアル

PHP5 の this、self、parent キーワードに関する詳細なチュートリアル

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

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

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


クラスUserName
{
// 属性を定義
private $name;
// コンストラクターを定義
function __construct($name)
{
$this->name = $ name; //このポインタはここで使用されています
}
//デストラクタ
function __destruct(){}
//ユーザー名を出力します メンバー関数
function printName()
{
print(
//印刷を実行します。 > $nameObject->printName(); //出力: heiyeluren
//オブジェクトの 2 番目のインスタンス化
$nameObject = new UserName( " PHP" );
//印刷を実行
$nameObject->printName(); //出力: PHP
?>


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



コードをコピー

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


class Counter
{
//静的変数を含む属性を定義します
private static $firstCount = ; //コンストラクター関数
function __construct()
{ シンボル)
🎜>
$countObject = new Counter(); 🎜> $countObject->printLastCount(); //出力
?>


ここで注意する必要があるのは、行 1 と行 1 の 2 か所です。 2 行目で静的変数 $firstCount を、operator の初期値で定義しました。このとき呼び出すのは、クラス自体によって定義された静的変数 $frestCount です。この静的変数は、クラス自体のインスタンスとは何の関係もありません。オブジェクトに続く場合、それはクラスにのみ関連します。クラス自体を呼び出すと、これを使用できません。参照するには、self を使用できます。self はクラス自体を指しており、オブジェクト インスタンスとは何の関係もないためです。 。言い換えれば、クラスに静的メンバーがある場合は、それらを呼び出すために self も使用する必要があります。
(3)parent
parent は親クラスへのポインタであることがわかっています。通常、親クラスのコンストラクタを呼び出すにはparentを使用します。



コードをコピー

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


//基本クラス
クラスAnimal
{

//基本クラスの属性 public $name; //名前 //基本クラスのコンストラクター public function __construct($name) { - >name = $name; } }

}
// 派生クラス
クラス person が Animal クラスを拡張 // person クラスが Animal クラスを継承
{
public $personSex; /Gender
public $personAge; //Age
//継承クラスのコンストラクター
function __construct($personSex, $personAge)
{parent::__construct("heiyeluren") ;
🎜> {
print( $this->name. " は " .$this->personSex. ",this year " .$this-> personAge );
} }
}
// Person オブジェクトをインスタンス化します
$personObject = new Person( "male", "")
// 印刷を実行します
$personObject ->printperson(); //出力: heiyeluren は今年男性です
?>


私たちは以下の詳細に注意を払っています: メンバー属性、特に親クラスの属性はすべてパブリックであり、継承されたクラスがこれを通じてアクセスできます。このとき、重要な点である line:parent::__construct( "heiyeluren" ) に注目します。このとき、親クラスのメンバーはすべて親クラスであるため、parent を使用して親クラスのコンストラクターを呼び出します。 public なので、これを直接使用して継承されたクラスを呼び出すことができます。
概要:
これはオブジェクト インスタンスへのポインター、self はクラス自体への参照、parent は親クラスへの参照です。
基本的に私が知っているのはこれだけです。いくつか誤解があるはずです。専門家の方に指摘してください。

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