Les applications Yii sont construites sur des composants. Les composants sont des instances de CComponent ou de ses sous-classes. Utiliser un composant implique principalement d'accéder à ses propriétés et de savoir quand le déclencher ou le gérer. La classe de base CComponent spécifie comment les propriétés et les événements sont définis.
Les propriétés d'un composant sont comme les variables membres publiques d'un objet. Il est lisible et inscriptible. Par exemple :
$width=$component->textWidth; // 获取 textWidth 属性 $component->enableCaching=true; // 设置 enableCaching 属性
Pour définir une propriété de composant, il suffit de définir une variable membre publique dans le classe de composants C'est tout. Une manière plus flexible consiste à définir ses méthodes getter et setter, par exemple :
public function getTextWidth() { return $this->_textWidth; } public function setTextWidth($value) { $this->_textWidth=$value; }
Le code ci-dessus définit a Écrivez le nom de l'attribut sous la forme textWidth
(les noms ne sont pas sensibles à la casse). Lorsqu'un attribut est lu, getTextWidth()
est appelé et sa valeur de retour devient la valeur de l'attribut ; de la même manière, lorsqu'un attribut est écrit, setTextWidth()
est appelé. Si la méthode setter n'est pas définie, la propriété sera en lecture seule et une exception sera levée si elle y est écrite. Un avantage de la définition d'une propriété à l'aide des méthodes getter et setter est que lorsque la propriété est lue ou écrite, une logique supplémentaire peut être exécutée (par exemple, effectuer des validations, déclencher des événements).
Remarque : Il existe une différence subtile entre les propriétés définies via les getters/setters et les variables membres de la classe. Le premier nom n'est pas sensible à la casse, tandis que le second est sensible à la casse.
Les événements de composants sont des propriétés spéciales qui utilisent certaines méthodes appelées 事件句柄 (event handlers)
comme valeurs. Attacher (attribuer) une méthode à un événement entraînera l’appel automatique de la méthode lorsque l’événement est déclenché. Par conséquent, le comportement d’un composant peut être modifié d’une manière imprévue lors du développement du composant.
Les événements de composants sont définis avec une méthode de dénomination commençant par on
. Comme les propriétés définies via les méthodes getter/setter, les noms d'événements ne sont pas sensibles à la casse. Le code suivant définit un événement onClicked
:
public function onClicked($event) { $this->raiseEvent('onClicked', $event); }
Le $event
utilisé comme paramètre d'événement ici est CEvent ou une instance de sa sous-classe.
On peut attacher une méthode à cet événement de la façon suivante :
$component->onClicked=$callback;
ici Le $callback
pointe vers un rappel PHP valide. Il peut s'agir d'une fonction globale ou d'une méthode dans une classe. Si tel est le cas, il doit être fourni sous forme de tableau : array($object,'methodName')
.
La structure du handle d'événement est la suivante :
function methodName($event) { ...... }
Voici $event
le paramètre décrivant l'événement (il provient de l'appel raiseEvent()
). $event
Les paramètres sont des instances de CEvent ou de ses sous-classes. À tout le moins, il contient des informations sur celui qui a déclenché l'événement.
À partir de la version 1.0.10, le gestionnaire d'événements peut également être une fonction anonyme prise en charge par PHP 5.3 ou version ultérieure. Par exemple,
$component->onClicked=function($event) { ...... }
Si nous appelons maintenant onClicked()
, l'événement onClicked
sera déclenché ( dans onClicked()
), le gestionnaire d'événements attaché sera appelé automatiquement.
Un événement peut être lié à plusieurs handles. Lorsqu'un événement est déclenché, ces gestionnaires seront exécutés dans l'ordre dans lequel ils ont été liés à l'événement. Si le gestionnaire décide d'empêcher l'exécution des gestionnaires suivants, il peut définir $event->handled sur true.
À partir de la version 1.0.2, le composant a ajouté la prise en charge des mixins et peut lier un ou plusieurs comportements. Un comportement est un objet dont les méthodes peuvent être implémentées par le composant auquel il est lié en collectant des fonctions 继承(inherited)
, plutôt qu'un héritage spécialisé (c'est-à-dire un héritage de classe ordinaire. Un composant peut être un « héritage multiple »). utilisé pour implémenter la liaison de plusieurs comportements.
La classe de comportement doit implémenter l'interface IBehavior . La plupart des comportements peuvent être hérités de CBehavior . Si un comportement doit être lié à un modèle, il peut également hériter de CModelBehavior ou CActiveRecordBehavior qui implémentent des fonctionnalités de liaison spécifiquement pour le modèle.
Pour utiliser un comportement, il doit d'abord être lié à un composant en appelant la méthode attach() de ce comportement. Ensuite, nous pouvons appeler cette méthode de comportement via le composant :
// $name 在组件中实现了对行为的唯一识别 $component->attachBehavior($name,$behavior); // test() 是行为中的方法。 $component->test();
Le comportement lié peut être comme un composant Accessible comme les propriétés normales dans . Par exemple, si un comportement nommé tree
est lié à un composant, nous pouvons obtenir une référence à ce comportement via le code suivant. Le comportement
$behavior=$component->tree; // 等于下行代码: // $behavior=$component->asa('tree');
peut être temporairement désactivé, auquel moment sa méthode deviendra invalide dans le composant. Par exemple :
$component->disableBehavior($name); // 下面的代码将抛出一个异常 $component->test(); $component->enableBehavior($name); // 现在就可以使用了 $component->test();
两个同名行为绑定到同一个组件下是有可能的。在这种情况下,先绑定的行为则拥有优先权。
当和 events, 一起使用时,行为会更加强大。当行为被绑定到组件时,行为里的一些方法就可以绑定到组件的一些事件上了. 这样一来,行为就可以观察或者改变组件的常规执行流程。
自版本 1.1.0 开始,一个行为的属性也可以通过绑定到的组件来访问。 这些属性包含公共成员变量以及通过 getters 和/或 setters 方式设置的属性。 例如, 若一个行为有一个 xyz 的属性,此行为被绑定到组件 $a,然后我们可以使用表达式 $a->xyz
访问此行为的属性。
以上就是Yii框架官方指南系列10——基础知识:组件的内容,更多相关内容请关注PHP中文网(www.php.cn)!