ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルの静的バインディングと動的バインディング

PHP_PHP チュートリアルの静的バインディングと動的バインディング

WBOY
WBOYオリジナル
2016-07-13 17:37:54708ブラウズ

アクセスを制限することに加えて、アクセス メソッドは、サブクラスによって呼び出されるメソッド、またはサブクラスによってアクセスされる属性も決定します。また、関数呼び出しと関数自体の関係、およびメンバー アクセスと関数間の関係も決定されます。変数メモリアドレスはバインディングと呼ばれます

コンピュータ言語には主に静的バインディングと動的バインディングの2つがあり、静的バインディングはプログラムの実行前にデータ構造間で行われるため、ランタイム情報を利用することができません。 PHP は動的言語であるため、静的バインディングをシミュレートできます。

動的バインディングは、実行時に生成されたアクセス要求に対して実行時に利用可能な情報のみを使用します。 オブジェクト指向コードでは、動的バインディングは、どのメソッドが呼び出されるか、またはどのプロパティにアクセスされるかを決定することが、アクセス スコープに基づくのではなく、クラス自体に基づいて行われることを意味します。

Public メンバーと protected メンバーのアクションは、動的バインディングを使用する、PHP の以前のバージョンの関数のアクションに似ています。つまり、メソッドがサブクラスでオーバーライドされ、サブクラスのインスタンスであるクラス メンバーにアクセスする場合、 (親クラスのメンバーにアクセスする代わりに) サブクラスのメンバーにアクセスします。

図 1 を見てください。このコードは「Hey! I am Son」を出力します。PHP が getSalutation を呼び出すと、これは Son のインスタンスであり、挨拶がパブリックである場合、PHP は同じ結果を生成します。オーバーライドされたメソッドの動作は、Son では非常によく似ており、identify の呼び出しはそのメソッドにバインドされています。

サブクラスでアクセスメソッドをprotectedからpublicに弱めたとしても、アクセスメソッドを使用する原理上、クラスメンバーへのアクセス制限を強化することは不可能なので、アクセスメソッドをpublicから変更します。保護することは不可能です。

動的バインディング

<?php
クラスのお父さん
{
protected $salutation = "こんにちは!" //こんにちは
; パブリック関数 getSalutation()
{
print("$this->挨拶 ");
$this->identify(); }
保護された関数identify()
{
print(「私は父です。 ");
}
}; クラスの息子が父親を拡張します
{
protected $salutation = "Hey!" //親クラスの protected $salutation は上書きされます
; protected functionidentify() //親クラスの protectedidentify() は上書きされます
{
print(「私は息子です。 ");
}
}; $obj = 新しい息子 (); $obj->getSalutation(); //出力 こんにちは! ?>


//注意: getSalutation() はサブクラスでオーバーライドされませんが、このクラスには $salutation() とidentify() がまだ存在します

//Son サブクラスのインスタンスの getSalutation() メソッドに動的にバインドされるため、Son インスタンスの getSalutation() メソッドが呼び出されます。
//親クラスのメンバー salutation とidentify()の代わりに、Sonクラスのメンバーsalutationとidentify()が呼び出されます。

プライベート メンバーは、所属するクラス内にのみ存在します。パブリック メンバーや保護されたメンバーとは異なり、PHP は静的バインディングをシミュレートします。図 2 の例を参照してください。サブクラスが挨拶をオーバーライドしているにもかかわらず、「こんにちは。私は父です。」が出力されます。の値。スクリプトは this->salutation を現在のクラス Father にバインドします。同様の原則がプライベート メソッドidentify().

に適用されます。
バインドメンバーとプライベートメンバー

http://www.bkjia.com/PHPjc/486526.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/486526.html

アクセスを制限することに加えて、アクセス メソッドは、サブクラスによって呼び出されるメソッド、またはサブクラスによってアクセスされる属性も決定します。また、関数呼び出しと関数自体の関係、およびメンバー アクセスと変数の関係も決定します。メモリアドレス...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。