ホームページ  >  記事  >  バックエンド開発  >  PHP 開発フレームワーク Yii Framework チュートリアル (6) CComponent コンポーネント

PHP 開発フレームワーク Yii Framework チュートリアル (6) CComponent コンポーネント

黄舟
黄舟オリジナル
2017-01-21 09:48:501175ブラウズ

Hangman で定義されている GameController は、$this->word の形式を使用してこの属性を読み書きできますが、実際には、GameController でこの属性に対応するメソッドは

/**
* @return string the word to be guessed. This value is persistent
* during the whole game session.
*/
public function getWord()
{
return $this->getPageState('word');
}
/**
* @param string the word to be guessed. This value is persistent
* during the whole game session.
*/
public function setWord($value)
{
$this->setPageState('word',$value);
}

です。 getWord を定義すると、SetWord は読み取りおよび書き込み操作をサポートする属性ワードを定義します (名前は大文字と小文字が区別されません)。属性の読み取り時には getWord() が呼び出され、属性の書き込み時にはその戻り値が属性値になります。 、setWord()が呼び出されます。 setter メソッドが定義されていない場合、プロパティは読み取り専用となり、書き込まれると例外がスローされます。 getter メソッドと setter メソッドを使用してプロパティを定義する利点は、プロパティの読み取りまたは書き込み時に追加のロジックを実行できることです (検証の実行、イベントのトリガーなど)。
基本クラス CComponent は、プロパティの定義に加えて、ASP.Net の UI コンポーネントとよく似たイベントのトリガーもサポートしています。

コンポーネント イベントは、イベント ハンドラーと呼ばれるメソッドを値として使用する特別なプロパティです。 イベントにメソッドをアタッチ (割り当て) すると、イベントが発生したときにそのメソッドが自動的に呼び出されます。したがって、コンポーネントの動作は、コンポーネント開発中に予期しない方法で変更される可能性があります。

コンポーネントイベントは、onで始まる名前で定義されます。 getter/setter メソッドを通じて定義されたプロパティと同様、イベント名では大文字と小文字が区別されません。次のコードは、onClicked イベントを定義します。イベント パラメーターとしての

public function
onClicked($event){$this->raiseEvent('onClicked', $event);}

$event は、CEvent またはそのサブクラスのインスタンスです。

次のようにこのイベントにメソッドをアタッチできます:

$component->onClicked=$callback;

ここの $callback は有効な PHP コールバックを指します。グローバル関数またはクラス内のメソッドにすることができます。 後者の場合は、配列として指定する必要があります: array($object,'methodName')。

イベント ハンドルの構造は次のとおりです:

function methodName($event)
{
......
}

ここでの $event は、イベントを説明するパラメーターです。 (これは raiseEvent() 転送からのものです)。 $event パラメータは、CEvent またはそのサブクラスの 1 つのインスタンスです。 少なくとも、誰がイベントをトリガーしたかに関する情報が含まれます。

バージョン 1.0.10 以降、イベント ハンドラーは PHP 5.3 以降でサポートされる匿名関数にすることもできます。 たとえば、

$component->onClicked=function($event) {
......
}

ここで onClicked() を呼び出すと、onClicked イベントが (onClicked() 内で) 発生し、添付されたイベント ハンドラーが自動的に呼び出されます。

イベントは複数のハンドルにバインドできます。イベントがトリガーされると、これらのハンドラーはイベントにバインドされた順序で実行されます。ハンドラーが後続のハンドラーの実行を禁止すると決定した場合、$event->handled を true に設定できます。

バージョン 1.0.2 以降、コンポーネントはミックスインのサポートを追加し、1 つ以上のビヘイビアーをバインドできるようになりました。 ビヘイビアーは、特殊な継承 (つまり、通常のクラスの継承) ではなく、コレクション関数によってバインドされているコンポーネントによってメソッドを継承できるオブジェクトです。コンポーネントは、「多重継承」方式で継承できます。複数のビヘイビアーのバインディングを実装します。

動作クラスは IBehavior インターフェイスを実装する必要があります。 ほとんどの動作は CBeavior から継承できます。動作をモデルにバインドする必要がある場合は、モデル専用のバインド機能を実装する CModelBehavior または CActiveRecordBehavior から継承することもできます。

ビヘイビアーを使用するには、まずこのビヘイビアーのattach() メソッドを呼び出してコンポーネントにバインドする必要があります。次に、コンポーネントを通じてこの動作メソッドを呼び出すことができます:

// $name 在组件中实现了对行为的唯一识别
$component->attachBehavior($name,$behavior);// test() 是行为中的方法。
$component->test();已绑定的行为可以像一个组件中的普通属性一样访问。 例如,如果一个名为 tree 的行为绑定到了一个组件,我们就可以通过如下代码获得指向此行为的引用。
$behavior=$component->tree;// 等于下行代码:
// $behavior=$component->asa('tree');行为是可以被临时禁止的,此时它的方法开就会在组件中失效.例如:
$component->disableBehavior($name);// 下面的代码将抛出一个异常
$component->test();
$component->enableBehavior($name);// 现在就可以使用了

$component->test(); 同じ名前の 2 つの動作を同じコンポーネントにバインドすることができます。この場合、最初に動作がバインドされ、次に動作がバインドされます。が優先されます。

イベントと一緒に使用すると、動作はさらに強力になります。 ビヘイビアーがコンポーネントにバインドされている場合、ビヘイビア内の一部のメソッドをコンポーネントの一部のイベントにバインドできます。このようにして、動作を有機的に観察したり、コンポーネントの通常の実行フローを変更したりできます。

バージョン 1.1.0 以降、ビヘイビアーのプロパティには、ビヘイビアがバインドされているコンポーネントを通じてアクセスすることもできます。 これらのプロパティには、パブリック メンバー変数と、ゲッターやセッターを介して設定されたプロパティが含まれます。 たとえば、ビヘイビアーにプロパティ xyz があり、このビヘイビアーがコンポーネント $a にバインドされている場合、式 $a->xyz を使用してこのビヘイビアーのプロパティにアクセスできます。

上記は、PHP 開発フレームワーク Yii Framework チュートリアル (6) CComponent コンポーネントの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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