PHP 5のthis,selfとparentキーワードの詳細チュートリアル
4315 ワード
まず私达は上の3つのキーワードを理解します:this、self、parent、字面の上で比较的に理解しやすくて、これを指して、自分、父、ほほほ、比较的に面白くて、私达はまずいくつかの概念を创立して、この3つのキーワードはそれぞれどんな地方で使いますか?一応説明しますが、thisは現在のオブジェクトを指すポインタ(一応Cの中のポインタで見ましょう)、selfは現在のクラスを指すポインタ、parentは親を指すポインタです.私たちがここで頻繁にポインタを使って説明しているのは、もっと良い言語が表現されていないからです.ほほほ、国語がマスターされていません. -_-#
そう言えばまだよく分からないので、実際の例を結びつけて話しましょう.
(1) this
上のクラスは行と行でthisポインタを使用していますが、その時thisは誰を指していましたか?実際には、インスタンス化時に誰を指すかを決定します.たとえば、最初にインスタンス化されたとき(行)、このとき$nameObjectオブジェクトを指し、行の印刷を実行するときにprint($this->name)を出力すると、もちろん「heiyeluren」が出力されます.2番目のインスタンスの場合、print($this->name)がprint($nameObject->name)になり、「PHP」が出力されます.したがって、thisは現在のオブジェクトインスタンスを指すポインタであり、他のオブジェクトやクラスを指しません.
(2)self
まず、selfはクラス自体を指し、すなわちselfはインスタンス化されたオブジェクトを指しないことを明確にし、一般的にselfはクラス内の静的変数を指すために使用される.
私たちのところは2つの場所、行目と行目に注意しなければなりません.2行目で静的変数$firstCountを定義し、初期値は、行のときにこの値を呼び出し、selfを使用して呼び出し、中間で「::」を使用して接続します.いわゆるドメイン演算子です.このとき、クラスが定義した静的変数$frestCountを呼び出します.私たちの静的変数は、次のオブジェクトのインスタンスに関係なく、クラスに関係しているだけで、クラス自体を呼び出すと、selfを使用して参照することはできません.selfはクラス自体を指し、任意のオブジェクトインスタンスに関係しないため、selfを使用して参照することができます.すなわち、クラス内の静的なメンバーであればselfを使用して呼び出さなければなりません.
(3)parent
parentは親を指すポインタであることを知っています.一般的にparentを使用して親の構造関数を呼び出します.
メンバー属性はpublicであり、特に親クラスでは、継承クラスがthisを介してアクセスできるようにするために使用されます.重要な点に注意してください.行目:parent:_construct(「heiyeluren」)では、parentを使用して親のコンストラクション関数を呼び出して親の初期化を行います.親のメンバーはpublicなので、継承クラスで直接thisを使用して呼び出すことができます.
まとめ:
thisはオブジェクトインスタンスへのポインタであり、selfはクラス自体への参照であり、parentは親クラスへの参照である.
基本的に私の知っていることはこんなに多くて、間違いを理解するところがあるに違いありません.
そう言えばまだよく分からないので、実際の例を結びつけて話しましょう.
(1) this
class UserName
{
//
private $name;
//
function __construct( $name )
{
$this->name = $name; // this
}
//
function __destruct(){}
//
function printName()
{
print( $this->name ); // this
}
}
//
$nameObject = new UserName( "heiyeluren" );
//
$nameObject->printName(); // : heiyeluren
//
$nameObject = new UserName( "PHP" );
//
$nameObject->printName(); // :PHP
?>
上のクラスは行と行でthisポインタを使用していますが、その時thisは誰を指していましたか?実際には、インスタンス化時に誰を指すかを決定します.たとえば、最初にインスタンス化されたとき(行)、このとき$nameObjectオブジェクトを指し、行の印刷を実行するときにprint($this->name)を出力すると、もちろん「heiyeluren」が出力されます.2番目のインスタンスの場合、print($this->name)がprint($nameObject->name)になり、「PHP」が出力されます.したがって、thisは現在のオブジェクトインスタンスを指すポインタであり、他のオブジェクトやクラスを指しません.
(2)self
まず、selfはクラス自体を指し、すなわちselfはインスタンス化されたオブジェクトを指しないことを明確にし、一般的にselfはクラス内の静的変数を指すために使用される.
class Counter
{
// ,
private static $firstCount = ;
private $lastCount;
//
function __construct()
{
$this->lastCount = ++selft::$firstCount; // self , self ::( )
}
//
function printLastCount()
{
print( $this->lastCount );
}
}
//
$countObject = new Counter();
$countObject->printLastCount(); //
?>
私たちのところは2つの場所、行目と行目に注意しなければなりません.2行目で静的変数$firstCountを定義し、初期値は、行のときにこの値を呼び出し、selfを使用して呼び出し、中間で「::」を使用して接続します.いわゆるドメイン演算子です.このとき、クラスが定義した静的変数$frestCountを呼び出します.私たちの静的変数は、次のオブジェクトのインスタンスに関係なく、クラスに関係しているだけで、クラス自体を呼び出すと、selfを使用して参照することはできません.selfはクラス自体を指し、任意のオブジェクトインスタンスに関係しないため、selfを使用して参照することができます.すなわち、クラス内の静的なメンバーであればselfを使用して呼び出さなければなりません.
(3)parent
parentは親を指すポインタであることを知っています.一般的にparentを使用して親の構造関数を呼び出します.
//
class Animal
{
//
public $name; //
//
public function __construct( $name )
{
$this->name = $name;
}
}
//
class Person extends Animal //Person Animal
{
public $personSex; //
public $personAge; //
//
function __construct( $personSex, $personAge )
{
parent::__construct( "heiyeluren" ); // parent
$this->personSex = $personSex;
$this->personAge = $personAge;
}
function printPerson()
{
print( $this->name. " is " .$this->personSex. ",this year " .$this->personAge );
}
}
// Person
$personObject = new Person( "male", "");
//
$personObject->printPerson(); // :heiyeluren is male,this year
?>
メンバー属性はpublicであり、特に親クラスでは、継承クラスがthisを介してアクセスできるようにするために使用されます.重要な点に注意してください.行目:parent:_construct(「heiyeluren」)では、parentを使用して親のコンストラクション関数を呼び出して親の初期化を行います.親のメンバーはpublicなので、継承クラスで直接thisを使用して呼び出すことができます.
まとめ:
thisはオブジェクトインスタンスへのポインタであり、selfはクラス自体への参照であり、parentは親クラスへの参照である.
基本的に私の知っていることはこんなに多くて、間違いを理解するところがあるに違いありません.