ホームページ >バックエンド開発 >PHPチュートリアル >PHPのYiiフレームワークにおける動作の定義とバインド方法の説明、yii Framework_PHPチュートリアル

PHPのYiiフレームワークにおける動作の定義とバインド方法の説明、yii Framework_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:56:33727ブラウズ

PHPのYiiフレームワーク、yiiフレームワークにおける動作の定義とバインディング方法の説明

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() が紹介されます。これは、以前に動作の要素について説明したときに話し終えなかったものです。まずはコードを見てみましょう:
リーリー

上記のコードは 2 つのことを行います:

    ビヘイビアーがアタッチされているオブジェクトにアクセスして操作できるように、ビヘイビアーの $owner を設定します
  • ビヘイビア内の events() によって返された配列をトラバースし、アタッチされたクラスの on() を通じて応答するイベントをクラスにバインドします

概要

ここまで述べてきましたが、バインディングについての概要は次のとおりです:

  • バインドされたアクションはコンポーネントから開始されます;
  • 静的バインディングは yiibaseComponent::behaviors();
  • をオーバーロードすることで実装されます
  • 動的バインディングは yiibaseComponent::attachBehaviors();
  • を呼び出すことで実現されます。
  • コンポーネントの設定項目として を設定することで動作をバインドすることもできます。
  • ビヘイビアは匿名ビヘイビアーと名前付きビヘイビアーに分けられ、その違いはバインディング時に名前が付けられるかどうかです。 命名動作は名前によって識別できるため、リリースなどの操作を的を絞った方法で実行できます。
  • バインド プロセス中に、後でバインドされた動作が、同じ名前の既にバインドされた動作を置き換えます。
  • バインディングには 2 つの意味があります。1 つは動作に $owner を設定することです。 2 つ目は、ビヘイビアーで応答するイベントのハンドラーをクラスにバインドすることです。
興味があるかもしれない記事:

PHPのYiiフレームワークでコンポーネントにバインドされたビヘイビアを削除する方法
  • PHPのYiiフレームワークでビヘイビアービヘイビアを使用する方法の詳細な説明
  • PHPのYiiフレームワークのプロパティ(Property)の詳細な説明
  • PHPのYiiフレームワークでデータベース設定とSQL操作を使用するチュートリアルの例
  • PHPのYiiフレームワークのイベントメカニズムの詳細な分析
  • PHPのYiiフレームワークのロギング関数の包括的な解釈
  • Yiiの使用 find の実装方法findAllで指定したフィールドを探します
  • Yiiデータベースの追加、削除、変更を解析します
  • Yii PHP Framework実践入門チュートリアル(詳細紹介)
  • PHPのYiiフレームワークにおけるコンポーネントの動作の属性インジェクションとメソッドインジェクションについて詳しく解説します

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

本当http://www.bkjia.com/PHPjc/1111897.html技術記事 PHP の Yii フレームワークにおけるビヘイビアの定義とバインディング メソッドの説明 Yii フレームワークでビヘイビアを定義するには、ビヘイビアを定義し、yiibaseBehavior またはそのサブクラスを継承してクラスを作成する必要があります。例: 名前空間 a...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。