ホームページ  >  記事  >  バックエンド開発  >  セクション 9 -- Binding_PHP チュートリアル

セクション 9 -- Binding_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:01:03764ブラウズ

*
+---------------------------------------------- -- --------------------------------+
| この記事は Haohappy によって読まれています<<コア PHP プログラミング> ;>
| = 章のクラスとオブジェクトからのメモ
| = 不必要なトラブルを避けるため、転載はご遠慮ください
| PHP 愛好家の皆さんと一緒に進歩しましょう
| = PHP5 Research Center: http://blog.csdn.net/haohappy2004
+---------- ------ -------------------------------------------- ------ --+
*/
セクション 9 -- バインディング
アクセスを制限することに加えて、アクセス メソッドは、サブクラスによって呼び出されるメソッド、またはサブクラスによってアクセスされるプロパティも決定します。関数呼び出しと関数自体の間、およびメンバーアクセスと変数の間の関係は、コンピューター言語ではバインディングと呼ばれます。静的バインディングと動的バインディングは、データ構造とデータの間に発生します。静的バインディング バインディングはコンパイル時に行われるため、関数呼び出しと関数本体、またはメモリ内の変数とブロックを対象とします。PHP は静的バインディングを使用しません。ただし、静的バインディングはシミュレートできます。
動的バインディングは、実行時に利用可能な情報のみを使用して、実行時に生成されるアクセス要求に対して行われます。動的バインディングは、どのメソッドが呼び出されるか、またはどのプロパティがアクセスされるかを決定することを意味します。
パブリック メンバーと保護されたメンバーは、動的バインディングを使用して、サブクラスでオーバーライドされるメソッドにアクセスする場合と同様に動作します。記述されたメンバーはサブクラスのインスタンスであり、(親クラスのメンバーにアクセスする代わりに) サブクラスのメンバーがアクセスされます。
このコードは、「Hey! I am Son.」を出力します。 Son のインスタンスである getSalutation を呼び出し、Salutation が public の場合、PHP はそのメソッドへの Bind を識別する呼び出しと同じ結果を生成します。
サブクラス内でアクセスメソッドをprotectedからpublicに弱めたとしても、アクセスメソッドを使用する原理上、クラスメンバーのアクセス制限を強化することは不可能です。モードを public から protected に変更します。
リスト 6.10 動的バインディング


コードをコピーします。 コードは次のとおりです。 class Father {
protected $salutation = "こんにちは!" ;挨拶 b Public Function GetSalutation () {
Print ("$ this- & gt; salutationn");
$ this- & gt; I am Father . Write
protected functionidentify() //義父の保護された IDentify () は {
Print ("I am Son. & Lt; br & gt; n"); //Output Hey!
?>//注意: getSalutation() はサブクラスでオーバーライドされませんが、実際にはこのクラスに $salutation() とidentify() がまだ存在します
//Son サブクラスのインスタンスの getSalutation() メソッド 動的バインディングしたがって、Son インスタンスの getSalutation() メソッドを呼び出すと、
//親クラスのメンバー salutation とidentify() の代わりに、Son クラスのメンバー salutation とidentify() が呼び出されます。
プライベート メンバーは にのみ存在します。 public メンバーや protected メンバーとは異なり、PHP は静的バインディングをシミュレートします。サブクラスが挨拶の値をオーバーライドしても、PHP は「Hello there! I am Father.」と出力します。 >salutation は現在のクラス Father にバインドされています。同様の原則がプライベート メソッドidentify() にも適用されます。

コードをコピーする コードは次のとおりです。 classFather { Private $ salutation = "こんにちは!";
パブリック関数 getsalutation () {
Print ("$ this-& gt; salutationn") ; private $salutation = "こんにちは!";
private functionidentify()
{
print( "I am so. & Lt; br & gt; n");
動的バインディングの利点は、継承されたクラスが親クラスの動作を変更できることです。例 6.12 を参照してください。動的バインディングを使用しているため、deleteUser で呼び出される isAuthorized のバージョンは、通常のユーザーの場合、User を呼び出すオブジェクトによって変更できます。 ::isAuthorized は FALSE を返します。これが AuthorizedUser のインスタンスである場合、PHP で AuthorizedUser::isAuthorized を呼び出すと、deleteUser がスムーズに実行されます。明確にするために、これはオブジェクトの型とメソッドと属性のバインディングです。親クラスとサブクラスの両方に存在するメソッドを呼び出すとき、または属性にアクセスするときは、まずインスタンスがどのオブジェクト タイプに属しているかを判断し、次に対応するクラスのメソッドとメソッドを呼び出します。動的バインディングの



コードをコピーします

コードは次のとおりです:
? & Lt;? PHP
クラス User // User {
Protected Function Isauthorize () // T {
Return ( $this->name); {

}
}
class AuthorizedUser extends User //認証されたユーザー
{ T ProteCted Function IsautHorized () // Write Isauthorize () {
Return (TRUE)
}}}
$ user = 新しいユーザー
$ user; - & gt; deleteUser("Zeev");
//authorized
$admin->deleteUser("Zeev");
この質問に答えるには、次のようにします。プライベート メンバーが必要な理由を思い出してください。保護されたメンバーの代わりにプライベート メンバーを使用するのはどのような場合ですか?
プライベート メンバーは、親の動作を変更または特殊化するためにサブクラスを継承したくない場合にのみ使用されます。一般に、優れたオブジェクト階層では、ほとんどの関数をサブクラスによって特殊化、改良、変更できます。これは、オブジェクト指向プログラミングの基礎の 1 つです。特定の状況では、サブクラスが親クラスの特定の部分を変更することを許可したくない場合などです。



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

www.bkjia.com

tru​​e

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

技術記事

* +------------------------------------------------ ----------------------------------+ |=この記事は、Haohappy が CorePHP プログラミングを読んだときの ClassesandObjects の章からのメモです。 |=|= 翻訳 メイン + 個人用...





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