国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison php教程 PHP開發(fā) Analyse du framework Yii (2) - Analyse de classe CComponent

Analyse du framework Yii (2) - Analyse de classe CComponent

Dec 27, 2016 am 11:04 AM

Yii est un framework Web basé sur des composants et la classe CComponent est la classe de base pour tous les composants.

La classe CComponent fournit des sous-classes avec des interfaces de programmation basées sur des propriétés, des événements et des comportements.

1. Propriétés du composant (propriété)

La classe Ccomponent ne fournit pas de stockage variable des attributs, et une sous-classe doit fournir deux méthodes pour l'implémenter. La méthode getPropertyName() de la sous-classe fournit les données d'opération de valeur de $component->PropertyName, et la méthode setPropertyName($val) de la sous-classe fournit l'opération d'affectation de valeur de $component->PropertyName.

$width=$component->textWidth;???? // Récupère l'attribut textWidth

La méthode d'implémentation consiste à appeler la méthode fournie par la sous-classe $width=$component- >getTextWidth( )

$component->textWidth=$width;???? // Définir l'attribut textWidth

L'implémentation consiste à appeler la méthode fournie par la sous-classe $component ->setTextWidth($width )

public function getTextWidth()
{
    return $this->_textWidth;
}
 
public function setTextWidth($value)
{
    $this->_textWidth=$value;
}

Les valeurs d'attribut du composant ne sont pas sensibles à la casse (les membres de la classe sont sensibles à la casse)

2. événements)

Un événement de composant est un attribut spécial qui enregistre (lie) un gestionnaire d'événement (qui peut être un nom de fonction, une méthode de classe ou une méthode d'objet) à un nom d'événement, et le gestionnaire est automatiquement appelé lorsque l'événement est évoqué.
Les événements de composant sont stockés dans le tableau $_e[] de CComponent. La valeur clé du tableau est le nom de l'événement. La valeur de la valeur clé est un objet Clist est un conteneur de file d'attente fourni par Yii. La méthode add() de Clist ajoute le handle de rappel de l'événement.

//Ajouter une fonction globale au traitement des événements
$component-> onBeginRequest="logRequest";
//Ajouter une méthode statique de classe au traitement des événements
$component-> onBeginRequest=array("CLog"," logRequest");
//Ajouter une méthode objet au traitement des événements
$component-> onBeginRequest=array($mylog," logRequest");

Raise event?:
$component ->raiseEvent('onBeginRequest ', $event);
appellera automatiquement?:
logRequest($event), Clog::logRequest($event) et $mylog. logRequest($event)

Le gestionnaire d'événements doit être défini comme suit?:

function methodName($event)
{
……
}
$event paramètres Il s'agit d'une instance de CEvent ou de sa sous-classe, qui contient au moins les informations de "qui a raccroché cet événement".

Le nom de l'événement commence par "on", qui peut être utilisé pour distinguer les attributs et les événements dans __get() et __set().

3. Comportement du composant (comportement)

Le comportement d'un composant est une méthode d'extension des fonctionnalités d'un composant sans héritage (voir le modèle de stratégie dans les modèles de conception).

Les classes de comportement doivent implémenter l'interface IBehavior, et la plupart des comportements peuvent être étendus à partir de la classe de base CBehavior.

L'interface IBehavior propose 4 méthodes.
attach($component) s'associe au composant, detach($component) supprime l'association $component, getEnabled() et setEnabled() définissent la validité de l'objet de comportement.

L'objet de comportement est stocké dans le tableau $_m[] du composant. La valeur de la clé du tableau est la cha?ne du nom du comportement et la valeur du tableau est l'objet de la classe de comportement.

Le composant étend un comportement via attachBehavior ($name,$behavior) :
$component-> attachBehavior ('render',$htmlRender)
Ajoute un nom de rendu à $component For comportement, $htmlRender doit être un objet qui implémente l'interface IBehavior, ou un tableau?:

array( ‘class’=>’path.to.BehaviorClass’,
    ‘property1′=>’value1′,
    ‘property2′=>’value2′,
* )

créera un objet de comportement et définira les valeurs d'attribut en fonction de la classe du tableau.

$htmlRender est stocké dans $_m['render'].

Lorsqu'une méthode non définie d'un composant est appelée en externe, la méthode magique __call()? traversera tous les objets de comportement et l'appellera si une méthode du même nom est trouvée.

Par exemple, $htmlRender a une méthode renderFromFile(), accessible directement en tant que méthode de composant?:

$component-> renderFromFile ()

4.Analyse du code source des composants

//所有部件的基類
class CComponent
{
    private $_e;
    private $_m;
 
    //獲取部件屬性、事件和行為的magic method
    public function __get($name)
    {
        $getter=’get’.$name;
        //是否存在屬性的get方法
        if(method_exists($this,$getter))
            return $this->$getter();
        //以on開頭,獲取事件處理句柄
        else if(strncasecmp($name,’on’,2)===0 && method_exists($this,$name))
        {
            // 事件名小寫
            $name=strtolower($name);
            // 如果_e[$name] 不存在,返回一個空的CList事件句柄隊(duì)列對象
            if(!isset($this->_e[$name]))
                $this->_e[$name]=new CList;
            // 返回_e[$name]里存放的句柄隊(duì)列對象
            return $this->_e[$name];
        }
        // _m[$name] 里存放著行為對象則返回
        else if(isset($this->_m[$name]))
            return $this->_m[$name];
        else
            throw new CException(Yii::t(‘yii’,'Property “{class}.{property}” is not defined.’,
                array(‘{class}’=>get_class($this), ‘{property}’=>$name)));
    }
 
    /**
    * PHP magic method
    * 設(shè)置組件的屬性和事件
    */
     public function __set($name,$value)
    {
        $setter=’set’.$name;
        //是否存在屬性的set方法
        if(method_exists($this,$setter))
            $this->$setter($value);
        //name以on開頭,這是事件處理句柄
        else if(strncasecmp($name,’on’,2)===0 && method_exists($this,$name))
        {
            // 事件名小寫
            $name=strtolower($name);
            // _e[$name] 不存在則創(chuàng)建一個CList對象
            if(!isset($this->_e[$name]))
                $this->_e[$name]=new CList;
            // 添加事件處理句柄
            $this->_e[$name]->add($value);
        }
        // 屬性沒有set方法,只有g(shù)et方法,為只讀屬性,拋出異常
        else if(method_exists($this,’get’.$name))
            throw new CException(Yii::t(‘yii’,'Property “{class}.{property}” is read only.’,
                array(‘{class}’=>get_class($this), ‘{property}’=>$name)));
        else
            throw new CException(Yii::t(‘yii’,'Property “{class}.{property}” is not defined.’,
                array(‘{class}’=>get_class($this), ‘{property}’=>$name)));
    }
 
    /**
    * PHP magic method
    * 為isset()函數(shù)提供是否存在屬性和事件處理句柄的判斷
    */
    public function __isset($name)
    {
        $getter=’get’.$name;
        if(method_exists($this,$getter))
            return $this->$getter()!==null;
        else if(strncasecmp($name,’on’,2)===0 && method_exists($this,$name))
        {
            $name=strtolower($name);
            return isset($this->_e[$name]) && $this->_e[$name]->getCount();
        }
        else
            return false;
    }
 
    /**
    * PHP magic method
    * 設(shè)置屬性值為空或刪除事件名字對應(yīng)的處理句柄
    */
    public function __unset($name)
    {
        $setter=’set’.$name;
        if(method_exists($this,$setter))
            $this->$setter(null);
        else if(strncasecmp($name,’on’,2)===0 && method_exists($this,$name))
            unset($this->_e[strtolower($name)]);
        else if(method_exists($this,’get’.$name))
            throw new CException(Yii::t(‘yii’,'Property “{class}.{property}” is read only.’,
        array(‘{class}’=>get_class($this), ‘{property}’=>$name)));
    }
 
    /**
    * PHP magic method
    *?CComponent未定義的類方法,尋找行為類里的同名方法,實(shí)現(xiàn)行為方法的調(diào)用
    */
    public function __call($name,$parameters)
    {
        // 行為類存放的$_m數(shù)組不空
        if($this->_m!==null)
        {
            // 循環(huán)取出$_m數(shù)組里存放的行為類
            foreach($this->_m as $object)
            {
                // 行為類對象有效,并且方法存在,調(diào)用之
                if($object->enabled && method_exists($object,$name))
                    return call_user_func_array(array($object,$name),$parameters);
            }
        }
        throw new CException(Yii::t(‘yii’,'{class} does not have a method named “{name}”.’,
            array(‘{class}’=>get_class($this), ‘{name}’=>$name)));
    }
 
    /**
    * 根據(jù)行為名返回行為類對象
    */
    public function asa($behavior)
    {
        return isset($this->_m[$behavior]) ? $this->_m[$behavior] : null;
    }
 
    /**
    * Attaches a list of behaviors to the component.
    * Each behavior is indexed by its name and should be an instance of
    *?{@link?IBehavior}, a string specifying the behavior class, or an
    * array of the following structure:
    *
* array( *???? ‘class’=>’path.to.BehaviorClass’, *???? ‘property1′=>’value1′, *???? ‘property2′=>’value2′, * ) *

* @param array list of behaviors to be attached to the component * @since 1.0.2 */ public function attachBehaviors($behaviors) { // $behaviors為數(shù)組 $name=>$behavior foreach($behaviors as $name=>$behavior) $this->attachBehavior($name,$behavior); } /** * 添加一個行為到組件 */ public function attachBehavior($name,$behavior) { /* $behavior不是IBehavior接口的實(shí)例,則為 * array( *???? ‘class’=>’path.to.BehaviorClass’, *???? ‘property1′=>’value1′, *???? ‘property2′=>’value2′, * ) * 傳遞給Yii::createComponent創(chuàng)建行為了并初始化對象屬性 */ if(!($behavior instanceof IBehavior)) $behavior=Yii::createComponent($behavior); $behavior->setEnabled(true); $behavior->attach($this); return $this->_m[$name]=$behavior; } /** * Raises an event. * This method represents the happening of an event. It invokes * all attached handlers for the event. * @param string the event name * @param CEvent the event parameter * @throws CException if the event is undefined or an event handler is invalid. */ public function raiseEvent($name,$event) { $name=strtolower($name); // _e[$name] 事件處理句柄隊(duì)列存在 if(isset($this->_e[$name])) { // 循環(huán)取出事件處理句柄 foreach($this->_e[$name] as $handler) { // 事件處理句柄為全局函數(shù) if(is_string($handler)) call_user_func($handler,$event); else if(is_callable($handler,true)) { // an array: 0 – object, 1 – method name list($object,$method)=$handler; if(is_string($object))?// 靜態(tài)類方法 call_user_func($handler,$event); else if(method_exists($object,$method)) $object->$method($event); else throw new CException(Yii::t(‘yii’,'Event “{class}.{event}” is attached with an invalid handler “{handler}”.’,array(‘{class}’=>get_class($this), ‘{event}’=>$name, ‘{handler}’=>$handler[1]))); } else throw new CException(Yii::t(‘yii’,'Event “{class}.{event}” is attached with an invalid handler “{handler}”.’,array(‘{class}’=>get_class($this), ‘{event}’=>$name, ‘{handler}’=>gettype($handler)))); // $event 的handled 設(shè)置為true后停止隊(duì)列里剩余句柄的調(diào)用 if(($event instanceof CEvent) && $event->handled) return; } } else if(YII_DEBUG && !$this->hasEvent($name)) throw new CException(Yii::t(‘yii’,'Event “{class}.{event}” is not defined.’, array(‘{class}’=>get_class($this), ‘{event}’=>$name))); } }

?以上就是Yii框架分析(二)——CComponent類剖析的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(m.miracleart.cn)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Middleware du framework Yii?: prise en charge de plusieurs stockages de données pour les applications Middleware du framework Yii?: prise en charge de plusieurs stockages de données pour les applications Jul 28, 2023 pm 12:43 PM

Middleware du framework Yii?: fournir une prise en charge de plusieurs stockages de données pour les applications Introduction Le middleware (middleware) est un concept important dans le framework Yii, qui fournit une prise en charge de plusieurs stockages de données pour les applications. Le middleware agit comme un filtre, insérant du code personnalisé entre les requêtes et les réponses d'une application. Grace au middleware, nous pouvons traiter, vérifier, filtrer les demandes, puis transmettre les résultats traités au middleware suivant ou au gestionnaire final. Le middleware du framework Yii est très simple à utiliser

Yii Framework Middleware?: ajoutez des fonctionnalités de journalisation et de débogage à votre application Yii Framework Middleware?: ajoutez des fonctionnalités de journalisation et de débogage à votre application Jul 28, 2023 pm 08:49 PM

Middleware du framework Yii?: ajouter des fonctionnalités de journalisation et de débogage aux applications [Introduction] Lors du développement d'applications Web, nous devons généralement ajouter des fonctionnalités supplémentaires pour améliorer les performances et la stabilité de l'application. Le framework Yii fournit le concept de middleware qui nous permet d'effectuer certaines taches supplémentaires avant et après que l'application traite la requête. Cet article explique comment utiliser la fonction middleware du framework Yii pour implémenter les fonctions de journalisation et de débogage. [Qu'est-ce qu'un middleware] Le middleware fait référence au traitement des demandes et des réponses avant et après que l'application traite la demande.

Comment utiliser le framework Yii en PHP Comment utiliser le framework Yii en PHP Jun 27, 2023 pm 07:00 PM

Avec le développement rapide des applications Web, le développement Web moderne est devenu une compétence importante. De nombreux frameworks et outils sont disponibles pour développer des applications web efficaces, parmi lesquels le framework Yii est très populaire. Yii est un framework PHP hautes performances basé sur des composants qui utilise les derniers modèles de conception et technologies, fournit des outils et des composants puissants et est idéal pour créer des applications Web complexes. Dans cet article, nous verrons comment utiliser le framework Yii pour créer des applications Web. Installez d'abord le framework Yii,

étapes pour mettre en ?uvre la mise en cache des pages Web et la segmentation des pages à l'aide du framework Yii étapes pour mettre en ?uvre la mise en cache des pages Web et la segmentation des pages à l'aide du framework Yii Jul 30, 2023 am 09:22 AM

étapes pour mettre en ?uvre la mise en cache et la segmentation de pages Web à l'aide du framework Yii Introduction?: Au cours du processus de développement Web, afin d'améliorer les performances et l'expérience utilisateur du site Web, il est souvent nécessaire de mettre en cache et de fragmenter la page. Le framework Yii fournit de puissantes fonctions de mise en cache et de mise en page, qui peuvent aider les développeurs à mettre en ?uvre rapidement la mise en cache et la segmentation de pages Web. Cet article explique comment utiliser le framework Yii pour implémenter la mise en cache et la segmentation de pages Web. 1. Activez la mise en cache des pages Web Dans le framework Yii, la mise en cache des pages Web peut être activée via le fichier de configuration. Ouvrez le fichier de configuration principal co

Comment utiliser des contr?leurs pour gérer les requêtes Ajax dans le framework Yii Comment utiliser des contr?leurs pour gérer les requêtes Ajax dans le framework Yii Jul 28, 2023 pm 07:37 PM

Dans le framework Yii, les contr?leurs jouent un r?le important dans le traitement des requêtes. En plus de gérer les requêtes de pages régulières, les contr?leurs peuvent également être utilisés pour gérer les requêtes Ajax. Cet article expliquera comment gérer les requêtes Ajax dans le framework Yii et fournira des exemples de code. Dans le framework Yii, le traitement des requêtes Ajax peut s'effectuer à travers les étapes suivantes : La première étape consiste à créer une classe contr?leur (Controller). Vous pouvez hériter de la classe de contr?leur de base yiiwebCo fournie par le framework Yii

Outils de débogage dans le framework Yii?: applications de profilage et de débogage Outils de débogage dans le framework Yii?: applications de profilage et de débogage Jun 21, 2023 pm 06:18 PM

Dans le développement d’applications Web modernes, les outils de débogage sont indispensables. Ils aident les développeurs à trouver et à résoudre divers problèmes liés à leurs applications. En tant que framework d'application Web populaire, le framework Yii fournit naturellement des outils de débogage. Cet article se concentrera sur les outils de débogage du framework Yii et expliquera comment ils nous aident à analyser et déboguer les applications. GiiGii est un générateur de code pour le framework Yii. Il peut générer automatiquement du code pour les applications Yii, telles que des modèles, des contr?leurs, des vues, etc. En utilisant Gii,

Crypter et décrypter les données sensibles à l'aide du middleware du framework Yii Crypter et décrypter les données sensibles à l'aide du middleware du framework Yii Jul 28, 2023 pm 07:12 PM

Cryptage et déchiffrement des données sensibles à l'aide du middleware du framework Yii Introduction : Dans les applications Internet modernes, la confidentialité et la sécurité des données sont des problèmes très importants. Pour garantir que les données sensibles des utilisateurs ne soient pas accessibles à des visiteurs non autorisés, nous devons chiffrer ces données. Le framework Yii nous offre un moyen simple et efficace de mettre en ?uvre les fonctions de cryptage et de décryptage des données sensibles. Dans cet article, nous expliquerons comment y parvenir en utilisant le middleware du framework Yii. Introduction au framework Yii Le framework Yii est un framework PHP hautes performances.

Yii Interview Questions: Ace Your PHP Framework Interview Yii Interview Questions: Ace Your PHP Framework Interview Apr 06, 2025 am 12:20 AM

Lorsque vous vous préparez à une entrevue avec YII Framework, vous devez conna?tre les principaux points de connaissances suivants: 1. Architecture MVC: Comprendre le travail collaboratif des modèles, des vues et des contr?leurs. 2. ActiveRecord: ma?triser l'utilisation des outils ORM et simplifier les opérations de base de données. 3. Widgets et aides: familier avec les composants et les fonctions d'assistance intégrés, et créez rapidement l'interface utilisateur. La ma?trise de ces concepts de base et des meilleures pratiques vous aidera à vous démarquer dans l'entretien.

See all articles