{一}PHP における this、self、parent の違いの 1 つは、この記事です。
オブジェクト指向プログラミング (OOP、オブジェクト指向プログラミング) は、今やプログラマーの基本スキルとなっています。 PHP の高度なプログラミングに OOP アイデアを使用することは、PHP プログラミング能力を向上させ、Web 開発アーキテクチャを計画する上で非常に有意義です。
書き直された後、PHP5 は OOP のサポートにおいて大きな進歩を遂げ、オブジェクト指向言語のほとんどの機能を備えた言語になりました。PHP4 よりも多くのオブジェクト指向機能を備えています。ここで私が主に話しているのは、this、self、parentという3つのキーワードの違いです。文字通り理解すると、彼らはそれぞれこれ、私、そして父親を指します。まず予備的な説明をしておきます。これは現在のオブジェクトへのポインタ (C のポインタとみなすことができます)、self は現在のクラスへのポインタ、parent は親クラスへのポインタです。これを表現するのにこれより適した言語がないため、ここでの説明にはポインタを頻繁に使用します。ポインタの概念については、百科事典を参照してください。
実例に基づいてお話しましょう。
コードをコピー コードは次のとおりです:
クラス名 // という名前のクラスを作成しますname Class
{
private $name; // 属性を定義、private
// 初期化のコンストラクターを定義
function __construct( $name)
{
$this- > name = $name; //このポインターステートメントはここで使用されています①
}
//デストラクター
function __destruct(){}
//ユーザー名メンバー関数を出力します
function printname()
{
print( $this->name ); // this ポインターステートメント②を再度使用するか、エコー出力を使用できます
}
}
$obj1 = 新しい名前( "PBPHome" ); //インスタンス化オブジェクトステートメント ③
//出力: PBPHome
echo "
" : Enter
//オブジェクトの 2 番目のインスタンス化
$obj2 = new name( "PHP" );
//印刷を実行します
$obj2->printname() //出力: PHP
?>
コードをコピー コードは次のとおりです:
class counter // カウンタ クラスを定義します。
{
//静的変数 $firstCount を含む属性を定義し、初期値 0 を割り当てます。 ステートメント①
private static $firstCount = 0;
private $lastCount; /Constructor
function __construct()
{
$this->lastCount = self::$firstCount; //self を使用して静的変数ステートメント②を呼び出します
}
//lastCount を出力します。 value
function printLastCount()
{
print( $this->lastCount );
}
}
//インスタンス化されたオブジェクト
$obj = new Counter() ;
$obj->printLastCount(); // ここでプログラムを実行すると、 1
?>
注意すべきローカルステートメントは 2 つあります。ここまで。ステートメント①で静的変数 $firstCount を定義し、ステートメント②でその値を self で呼び出しています。このとき呼び出すのは、クラス自身が定義した静的変数 $frestCount です。私たちの静的変数は、次のオブジェクトのインスタンスとは何の関係もありません。それはクラスにのみ関連しています。その後、クラス自体を呼び出した場合、self がクラス自体を指しており、 を参照するために this を使用することはできません。オブジェクト インスタンスとは何の関係もありません。次に、前に使用した this はインスタンス化されたオブジェクト $obj を呼び出しますので、混乱しないでください。
コードをコピー コードは次のとおりです:
//基本クラスを作成します Animal
class Animal
{
public $name //基本クラスの属性、name $name
// 基本クラスのコンストラクター、初期化代入
public function __construct( $name )
{
$this->name = $name
}
}
//Define派生クラス Person は Animal クラスから継承します
class Person extends Animal
{
public $personSex; //派生クラスの場合、新しく定義された属性 $personSex 性別、$personAge 年齢
public $personAge; 🎜 >//派生クラスのコンストラクタ
function __construct( $personSex, $personAge )
{
parent::__construct( "PBPHome" ) //parentを使用して親クラス①のコンストラクタ文を呼び出します。
$this->personSex = $personSex;
$this->gt;personAge = $personAge;
}
// 出力に使用される派生クラスのメンバー関数、形式: name name ,age は age
function printperson()
{
print( $this->name. " は " .$this->personSex. "、年齢は " .$this-> personAge );
}
}
//人物オブジェクトをインスタンス化します
$personObject = new Person( "male", "21");
// 印刷を実行します
$personObject - >printPerson(); //出力結果: PBPHome is Male,age is 21
?>
概要: これはインスタンス化時に決定されるオブジェクト インスタンスへのポインターです。self はクラス自体への参照であり、通常はクラス内の静的変数を指すために使用されます。一般に、parent は親クラスへの参照です。 、parent は、親クラスのコンストラクターを呼び出すために使用されます。