ホームページ >バックエンド開発 >PHPチュートリアル >PHPのYiiフレームワークにおける動作の定義とバインド方法の説明、yii Framework_PHPチュートリアル
define Behavior
動作を定義するには、yiibaseBehavior またはそのサブクラスを継承してクラスを作成します。例:
リーリー上記のコードは、動作クラス appcomponentsMyBehavior を定義し、動作がアタッチされるコンポーネントの 2 つのプロパティ prop1、prop2 とメソッド foo() を提供します。プロパティ prop2 は、ゲッター getProp2() およびセッター setProp2() を通じて定義されることに注意してください。 yiibaseObject は yiibaseBehavior の祖先クラスであるため、このように使用できます。この祖先クラスは getter メソッドと setter メソッドを使用したプロパティの定義をサポートしています
。ヒント: ビヘイビア内では、yiibaseBehavior::owner プロパティを通じてビヘイビアがアタッチされているコンポーネントにアクセスできます。
静的メソッドのバインディング動作
動作を静的にバインドするには、yiibaseComponent::behaviors() をオーバーロードするだけです。 このメソッドは、クラスの動作を記述するために使用されます。それをどう説明すればいいでしょうか? 構成を使用して説明します。これは、Behavior クラス名または Behavior クラスの構成配列にすることができます:
リーリー設定ファイルを介してバインドする静的バインド方法もあります:
リーリー動的メソッドバインディング動作
動作を動的にバインドするには、 yiibaseComponent::attachBehaviors():
を呼び出す必要があります。 リーリーこのメソッドは配列パラメーターを受け取り、パラメーターの意味は上記の静的バインディング動作と同じです。
上記の例では、配列のキーが動作の名前として使用されており、キー名を提供しない動作の場合は匿名動作です。
名前付きビヘイビアーの場合、 yiibaseComponent::getBehavior() を呼び出してバインドされたビヘイビアーを取得できます:
リーリー匿名のアクションの場合、それらを直接引用する方法はありません。ただし、すべてのバインドされた動作を取得できます:
リーリーバインディングの内部原則
yiibaseComponent::behaviors() をオーバーロードするだけで、魔法のようにビヘイビアーを使用できるようになりますか? これは氷山の一角にすぎません。実際には、関連する側面は次のとおりです。 リーリー
動作は 4 つのメソッドのうちの 1 つだけを考慮しており、より多くのコードはコンポーネントで完成されます。yiibaseComponent::behaviors() 静的メソッドのバインド動作について説明したときに前述したように、動作を記述する配列を返します。 yiibaseComponent::ensuerBehaviors() はどうですか?
このメソッドは、コンポーネントの多くの場所で __get() __set() __isset() __unset() __call() canGetProperty() hasMethod() hasEventHandlers() on() off() などを呼び出します。頭痛?一言で言えば、この関数はクラスの属性、メソッド、イベントに関係する限り呼び出されます。
非常に多くの定命の者たちに必要とされているensureBehaviors()の人々は誰ですか? その名の通り、彼の役割は「保障する」こと。実際、これは、behaviors() で記述された動作がバインドされていることを確認するためだけです:
リーリー
このメソッドは主にサブクラスに使用されます。yiibaseComponent には事前注入動作がないため、この呼び出しは役に立ちません。 ただし、サブクラスの場合は、 yiibaseComponent::behaviros() をオーバーロードして、一部の動作を事前に挿入することができます。 次に、この関数はこれらの動作を最初に挿入します。上記のコードから、次に話したい 3 番目のこと、yiibaseComponentattachBehaviorInternal():
が自然にわかります。 リーリー
まず注意していただきたいのは、これはプライベートメンバーであるということです。実際、Yii では *Internal というサフィックスが付いたメソッドはすべてプライベートです。 このメソッドは次のことを行います:$behavior パラメータが Behavior インスタンスではない場合は、それをパラメータとして使用し、Yii::createObject() を使用して作成します。
動作を匿名動作としてバインドする場合は、動作をこのクラスに直接アタッチします。
名前付きの動作の場合は、まず同じ名前の動作がこのクラスにバインドされているかどうかを確認します。存在する場合は、前の動作を後の動作に置き換えます。
yiibaseComponent::attachBehaviorInternal() では、$this をパラメータとして yiibaseBehavior::attach() が呼び出されます。 したがって、バインディングに関連する最後の要素である yiibaseBehavior::attach() が紹介されます。これは、以前に動作の要素について説明したときに話し終えなかったものです。まずはコードを見てみましょう:
リーリー
概要
ここまで述べてきましたが、バインディングについての概要は次のとおりです:http://www.bkjia.com/PHPjc/1111897.html