Le GameController défini dans Hangman utilise certains attributs word Vous pouvez utiliser le format $this->word pour lire et écrire cet attribut, mais en fait la méthode correspondant à cet attribut dans GameController est
/** * @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); }
En d'autres termes, définissez un mot d'attribut qui prend en charge les opérations de lecture et d'écriture en définissant getWord et setWord (le nom n'est pas sensible à la casse). Lorsque l'attribut est lu, getWord() sera appelé et sa valeur de retour deviendra la valeur de retour. valeur d'attribut ; de la même manière, lors de l'écriture d'une propriété, setWord() 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).
En plus de définir des propriétés, la classe de base CComponent prend également en charge le déclenchement d'événements, ce qui est très similaire aux composants d'interface utilisateur d'ASP.Net.
Les événements de composants sont des propriétés spéciales qui utilisent des méthodes appelées gestionnaires d'événements 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 un nom 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é ici comme paramètre d'événement est une instance de CEvent ou de sa sous-classe.
Nous pouvons attacher une méthode à cet événement comme suit :
$component->onClicked=$callback;
Ici, $callback pointe vers un rappel PHP valide. Il peut s'agir d'une fonction globale ou d'une méthode dans une classe. Si c'est ce dernier cas, il doit être fourni sous forme de tableau : array($object,'methodName').
La structure du gestionnaire d'événements est la suivante :
function methodName($event) { ...... }
Ici $event est le paramètre décrivant l'événement (il vient de l'appel raiseEvent()). Le paramètre $event est une instance de CEvent ou de l'une de ses sous-classes. Au minimum, il contient des informations sur la personne 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 onClicked() maintenant, l'événement onClicked sera déclenché (dans onClicked()) et 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 héritées par le composant auquel il est lié en collectant des fonctions, plutôt qu'en héritage spécialisé (c'est-à-dire un héritage de classe ordinaire). Un composant peut être hérité de manière « héritage multiple ». Implémentez 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 CBeavior . 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. Nous pouvons ensuite appeler cette méthode de comportement via le composant :
// $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(); Il est possible que deux comportements portant le même nom soient liés au même composant. , le comportement lié en premier est prioritaire.
Les comportements sont encore plus puissants lorsqu'ils sont utilisés avec des événements. Lorsqu'un comportement est lié à un composant, certaines méthodes du comportement peuvent être liées à certains événements du composant. De cette manière, le comportement peut être observé de manière organique ou modifier le flux d'exécution régulier du composant.
Depuis la version 1.1.0, les propriétés d'un comportement sont également accessibles via le composant auquel il est lié. Ces propriétés incluent des variables membres publiques et des propriétés définies via des getters et/ou des setters. Par exemple, si un comportement a une propriété xyz et que ce comportement est lié au composant $a, alors nous pouvons accéder à la propriété de ce comportement en utilisant l'expression $a->xyz.
Ce qui précède est le contenu du tutoriel du framework de développement PHP Yii Framework (6) Composant CComponent. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !