Yii Framework v1.1.10 绫诲弬鑰

CComponent

system.base
缁ф壙 class CComponent
瀛愮被 CAccessRule, CAction, CActiveFinder, CApplicationComponent, CAuthAssignment, CAuthItem, CBaseActiveRelation, CBaseController, CBaseUrlRule, CBaseUserIdentity, CBehavior, CCacheDependency, CChainedCacheDependency, CCodeFile, CConsoleCommand, CConsoleCommandRunner, CDataProvider, CDateFormatter, CDbColumnSchema, CDbCommand, CDbCommandBuilder, CDbCriteria, CDbDataReader, CDbExpression, CDbMigration, CDbSchema, CDbTableSchema, CDbTransaction, CEvent, CFilter, CFormElement, CGettextFile, CGridColumn, CHttpCookie, CList, CLocale, CLogFilter, CLogRoute, CLogger, CMap, CMemCacheServerConfiguration, CModel, CModule, CNumberFormatter, CPagination, CQueue, CSort, CStack, CTheme, CUploadedFile, CValidator, CWebService, CWsdlGenerator
婧愯嚜 1.0
鐗堟湰 $Id: CComponent.php 3521 2011-12-29 22:10:57Z mdomba $
婧愮爜 framework/base/CComponent.php
CComponent 鏄墍鏈夌粍浠剁被鐨勫熀绫汇

CComponent 瀹炵幇浜嗗畾涔夈佷娇鐢ㄥ睘鎬у拰浜嬩欢鐨勫崗璁

灞炴ф槸閫氳繃getter鏂规硶鎴/鍜宻etter鏂规硶瀹氫箟銆 璁块棶灞炴у氨鍍忚闂櫘閫氱殑瀵硅薄鍙橀噺銆 璇诲彇鎴栧啓鍏ュ睘鎬у皢璋冪敤搴旂浉鐨刧etter鎴杝etter鏂规硶锛 渚嬪锛
$a=$component->text;     // equivalent to $a=$component->getText();
$component->text='abc';  // equivalent to $component->setText('abc');
getter鍜宻etter鏂规硶鐨勬牸寮忓涓嬶紝
// getter, defines a readable property 'text'
public function getText() { ... }
// setter, defines a writable property 'text' with $value to be set to the property
public function setText($value) { ... }


浜嬩欢鏄畾涔変负浠モ榦n鈥欏紑澶寸殑鏂规硶銆 杩欎釜鏂规硶鍚嶅氨鏄簨浠跺悕銆 褰撳彂璧蜂竴涓簨浠讹紝闄勫姞鍒颁簨浠朵笂鐨勫嚱鏁帮紙鍥炶皟锛屾垨浜嬩欢澶勭悊绋嬪簭锛夊皢琚嚜鍔ㄨ皟鐢ㄣ

涓涓簨浠剁殑鍙戣捣鏄氳繃raiseEvent鏂规硶锛 闄勫姞鍦ㄦ浜嬩欢涓婄殑浜嬩欢澶勭悊绋嬪簭灏嗘寜椤哄簭鑷姩琚皟鐢ㄣ 浜嬩欢澶勭悊绋嬪簭蹇呴』鎸変互涓嬫牸寮忓畾涔夛紝
function eventHandler($event) { ... }
鍏朵腑鐨$event鍖呭惈浜嗕笌浜嬩欢鐩稿叧鐨勫弬鏁般

瑕侀檮鍔犱竴涓簨浠跺鐞嗙▼搴忥紝鍙傝attachEventHandler銆 浣犱篃鍙互浣跨敤濡備笅璇硶锛
$component->onClick=$callback;    // or $component->onClick->add($callback);
鍏朵腑鐨$callback鎸囩殑鏄竴涓湁鏁堢殑PHP鍥炶皟鍑芥暟銆備笅闈㈡垜浠睍绀轰竴涓洖璋冨嚱鏁扮殑渚嬪瓙锛
'handleOnClick'                   // handleOnClick() is a global function
array($object,'handleOnClick')    // using $object->handleOnClick()
array('Page','handleOnClick')     // using Page::handleOnClick()


鍙戣捣涓涓簨浠跺彲浠ラ氳繃浣跨敤raiseEvent銆 杩欎釜鏂规硶閫氬父瀹氫箟涓哄涓嬪舰寮忥細
public function onClick($event)
{
    $this->raiseEvent('onClick',$event);
}
鍏朵腑$eventCEvent鎴栧畠鐨勫瓙绫荤殑涓涓疄渚嬨 浣犲彲鐩存帴璋冪敤涓涓柟娉曟潵浠f浛raiseEvent

灞炴у悕鍜屼簨浠跺悕閮芥槸澶у皬鍐欐晱鎰熺殑锛岄渶瑕佸尯鍒嗗ぇ鍐欍

CComponent鏀寔琛屼负銆 涓涓涓烘槸闄勫姞鍦ㄧ粍浠朵笂鐨IBehavior绫荤殑瀹炰緥銆 缁勪欢鍙互璋冪敤琛屼负涓殑鏂规硶锛岃繖涓柟娉曞氨濂藉儚鏄粍浠剁殑涓閮ㄤ唤銆 澶氫釜琛屼负鍙互闄勫姞鍒板悓涓涓粍浠躲

闄勫姞琛屼负鍙互閫氳繃璋冪敤attachBehavior鏂规硶锛 浠庣粍浠跺垎绂昏涓哄彲浠ヨ皟鐢detachBehavior鏂规硶銆

琛屼负鍙互閫氳繃璋冪敤enableBehavior 鏂规硶鎴disableBehavior鏂规硶鐨勪复鏃跺惎鐢ㄦ垨绂佺敤銆 褰撶鐢ㄦ椂锛岀粍浠跺皢涓嶈兘璋冪敤琛屼负涓殑鏂规硶銆

浠1.1.0鐗堟湰寮濮嬶紝 涓涓涓虹殑灞炴э紙鎴栧畠鐨勫叕鍏卞彉閲忔垨閫氳繃getters/setters鏂规硶瀹氫箟鐨勫睘鎬э級锛 鑳藉閫氳繃杩欎釜缁勪欢杩涜璁块棶銆

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__call() 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 CComponent
__get() 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 CComponent
__isset() 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 CComponent
__set() 璁剧疆涓涓粍浠剁殑灞炴у笺 CComponent
__unset() 璁剧疆涓涓粍浠剁殑灞炴т负null銆 CComponent
asa() 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° CComponent
attachBehavior() 闄勫姞涓涓涓哄埌缁勪欢銆 CComponent
attachBehaviors() 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 CComponent
attachEventHandler() 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 CComponent
canGetProperty() 纭畾灞炴ф槸鍚﹀彲璇汇 CComponent
canSetProperty() 纭畾灞炴ф槸鍚﹀彲鍐欍 CComponent
detachBehavior() 浠庣粍浠朵腑鍒嗙涓涓涓恒 CComponent
detachBehaviors() 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 CComponent
detachEventHandler() 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 CComponent
disableBehavior() 绂佺敤涓涓檮鍔犺涓恒 CComponent
disableBehaviors() 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
enableBehavior() 鍚敤涓涓檮鍔犺涓恒 CComponent
enableBehaviors() 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
evaluateExpression() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 CComponent
getEventHandlers() 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 CComponent
hasEvent() 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 CComponent
hasEventHandler() 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 CComponent
hasProperty() 纭畾灞炴ф槸鍚﹁瀹氫箟銆 CComponent
raiseEvent() 鍙戣捣涓涓簨浠躲 CComponent

鏂规硶璇︾粏

__call() 鏂规硶
public mixed __call(string $name, array $parameters)
$name string 鏂规硶鍚
$parameters array 鏂规硶鍙傛暟
{return} mixed 鏂规硶杩斿洖鍊
婧愮爜锛 framework/base/CComponent.php#254 (鏄剧ず)
public function __call($name,$parameters)
{
    if(
$this->_m!==null)
    {
        foreach(
$this->_m as $object)
        {
            if(
$object->getEnabled() && method_exists($object,$name))
                return 
call_user_func_array(array($object,$name),$parameters);
        }
    }
    if(
class_exists('Closure'false) && $this->canGetProperty($name) && $this->$name instanceof Closure)
        return 
call_user_func_array($this->$name$parameters);
    throw new 
CException(Yii::t('yii','{class} and its behaviors do not have a method or closure named "{name}".',
        array(
'{class}'=>get_class($this), '{name}'=>$name)));
}

濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 涓嶈兘鐩存帴璋冪敤姝ゆ柟娉曘傝繖鏄噸杞戒簡PHP鐨勯瓟鏈柟娉曪紝 瀹炵幇浜嗚繖涓涓哄姛鑳姐

__get() 鏂规硶
public mixed __get(string $name)
$name string 灞炴у悕鎴栦簨浠跺悕
{return} mixed 灞炴у硷紝闄勫姞鐨勪簨浠跺鐞嗙▼搴忔垨涓涓鍚嶇О
婧愮爜锛 framework/base/CComponent.php#108 (鏄剧ず)
public function __get($name)
{
    
$getter='get'.$name;
    if(
method_exists($this,$getter))
        return 
$this->$getter();
    else if(
strncasecmp($name,'on',2)===&& method_exists($this,$name))
    {
        
// duplicating getEventHandlers() here for performance
        
$name=strtolower($name);
        if(!isset(
$this->_e[$name]))
            
$this->_e[$name]=new CList;
        return 
$this->_e[$name];
    }
    else if(isset(
$this->_m[$name]))
        return 
$this->_m[$name];
    else if(
is_array($this->_m))
    {
        foreach(
$this->_m as $object)
        {
            if(
$object->getEnabled() && (property_exists($object,$name) || $object->canGetProperty($name)))
                return 
$object->$name;
        }
    }
    throw new 
CException(Yii::t('yii','Property "{class}.{property}" is not defined.',
        array(
'{class}'=>get_class($this), '{property}'=>$name)));
}

杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 涓嶈兘鐩存帴璋冪敤姝ゆ柟娉曘傝繖鏄噸杞戒簡PHP鐨勯瓟鏈柟娉曪紝 鍏佽浣跨敤浠ヤ笅璇硶璇诲彇涓涓睘鎬ф垨鑾峰緱涓涓簨浠跺鐞嗙▼搴忥細

$value=$component->propertyName;
$handlers=$component->eventName;

鍙傝

__isset() 鏂规硶
public boolean __isset(string $name)
$name string 灞炴у悕鎴栦簨浠跺悕
{return} boolean
婧愮爜锛 framework/base/CComponent.php#185 (鏄剧ず)
public function __isset($name)
{
    
$getter='get'.$name;
    if(
method_exists($this,$getter))
        return 
$this->$getter()!==null;
    else if(
strncasecmp($name,'on',2)===&& method_exists($this,$name))
    {
        
$name=strtolower($name);
        return isset(
$this->_e[$name]) && $this->_e[$name]->getCount();
    }
    else if(
is_array($this->_m))
    {
         if(isset(
$this->_m[$name]))
             return 
true;
        foreach(
$this->_m as $object)
        {
            if(
$object->getEnabled() && (property_exists($object,$name) || $object->canGetProperty($name)))
                return 
$object->$name!==null;
        }
    }
    return 
false;
}

妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 涓嶈兘鐩存帴璋冪敤姝ゆ柟娉曘傝繖鏄噸杞戒簡PHP鐨勯瓟鏈柟娉曪紝 鍏佽浣跨敤isset()妫娴嬬粍浠跺睘鎬ф槸鍚﹀凡璁剧疆銆

__set() 鏂规硶
public mixed __set(string $name, mixed $value)
$name string 灞炴у悕鎴栬呬簨浠跺悕
$value mixed 灞炴у兼垨鍥炶皟
{return} mixed
婧愮爜锛 framework/base/CComponent.php#149 (鏄剧ず)
public function __set($name,$value)
{
    
$setter='set'.$name;
    if(
method_exists($this,$setter))
        return 
$this->$setter($value);
    else if(
strncasecmp($name,'on',2)===&& method_exists($this,$name))
    {
        
// duplicating getEventHandlers() here for performance
        
$name=strtolower($name);
        if(!isset(
$this->_e[$name]))
            
$this->_e[$name]=new CList;
        return 
$this->_e[$name]->add($value);
    }
    else if(
is_array($this->_m))
    {
        foreach(
$this->_m as $object)
        {
            if(
$object->getEnabled() && (property_exists($object,$name) || $object->canSetProperty($name)))
                return 
$object->$name=$value;
        }
    }
    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鐨勯瓟鏈柟娉曪紝 鍏佽浣跨敤浠ヤ笅璇硶璁剧疆涓涓睘鎬ф垨鑾峰緱涓涓簨浠跺鐞嗙▼搴忥細

$this->propertyName=$value;
$this->eventName=$callback;

鍙傝

__unset() 鏂规硶
public mixed __unset(string $name)
$name string 灞炴у悕鎴栦簨浠跺悕
{return} mixed
婧愮爜锛 framework/base/CComponent.php#216 (鏄剧ず)
public function __unset($name)
{
    
$setter='set'.$name;
    if(
method_exists($this,$setter))
        
$this->$setter(null);
    else if(
strncasecmp($name,'on',2)===&& method_exists($this,$name))
        unset(
$this->_e[strtolower($name)]);
    else if(
is_array($this->_m))
    {
        if(isset(
$this->_m[$name]))
            
$this->detachBehavior($name);
        else
        {
            foreach(
$this->_m as $object)
            {
                if(
$object->getEnabled())
                {
                    if(
property_exists($object,$name))
                        return 
$object->$name=null;
                    else if(
$object->canSetProperty($name))
                        return 
$object->$setter(null);
                }
            }
        }
    }
    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)));
}

璁剧疆涓涓粍浠剁殑灞炴т负null銆 涓嶈兘鐩存帴璋冪敤姝ゆ柟娉曘傝繖鏄噸杞戒簡PHP鐨勯瓟鏈柟娉曪紝 鍙互浣跨敤unset()璁剧疆涓涓粍浠跺睘鎬т负null銆

asa() 鏂规硶
public IBehavior asa(string $behavior)
$behavior string 琛屼负鍚
{return} IBehavior 杩斿洖琛屼负瀵硅薄锛屽鏋滆涓哄璞′笉瀛樺湪锛屽垯杩斿洖null銆
婧愮爜锛 framework/base/CComponent.php#276 (鏄剧ず)
public function asa($behavior)
{
    return isset(
$this->_m[$behavior]) ? $this->_m[$behavior] : null;
}

杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° 鈥榓sa鈥欎唬琛ㄢ榓s a鈥欍

attachBehavior() 鏂规硶
public IBehavior attachBehavior(string $name, mixed $behavior)
$name string 琛屼负鐨勫悕瀛楋紝瀹冨簲璇ユ槸鍞竴琛屼负鏍囪瘑銆
$behavior mixed 杩欎釜琛屼负鐨勯厤缃紝瀹冮鍏堥氳繃杩欎釜鍙傛暟锛 璋冪敤YiiBase::createComponent鍒涘缓琛屼负瀵硅薄銆
{return} IBehavior 琛屼负瀵硅薄
婧愮爜锛 framework/base/CComponent.php#324 (鏄剧ず)
public function attachBehavior($name,$behavior)
{
    if(!(
$behavior instanceof IBehavior))
        
$behavior=Yii::createComponent($behavior);
    
$behavior->setEnabled(true);
    
$behavior->attach($this);
    return 
$this->_m[$name]=$behavior;
}

闄勫姞涓涓涓哄埌缁勪欢銆 杩欎釜鏂规硶灏嗗熀浜庣粰瀹氱殑閰嶇疆鍒涘缓琛屼负瀵硅薄銆 鍦ㄦ鍚庯紝 杩欎釜琛屼负瀵瑰儚灏嗚皟鐢ㄥ畠鐨IBehavior::attach鏂规硶杩涜鍒濆鍖栥

attachBehaviors() 鏂规硶
public void attachBehaviors(array $behaviors)
$behaviors array 闄勫姞鍒扮粍浠剁殑涓涓涓哄垪琛
婧愮爜锛 framework/base/CComponent.php#295 (鏄剧ず)
public function attachBehaviors($behaviors)
{
    foreach(
$behaviors as $name=>$behavior)
        
$this->attachBehavior($name,$behavior);
}

闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 姣忎竴涓涓烘槸涓涓 IBehavior瀹炰緥锛屼娇鐢ㄥ瓧绗︿覆鎸囧畾涓涓涓虹被锛 鎴栦娇鐢ㄤ竴涓涓嬬粨鏋勭殑鏁扮粍鏉ユ寚瀹氾細

array(
    'class'=>'path.to.BehaviorClass',
    'property1'=>'value1',
    'property2'=>'value2',
)

attachEventHandler() 鏂规硶
public void attachEventHandler(string $name, callback $handler)
$name string 浜嬩欢鍚
$handler callback 浜嬩欢澶勭悊绋嬪簭
婧愮爜锛 framework/base/CComponent.php#512 (鏄剧ず)
public function attachEventHandler($name,$handler)
{
    
$this->getEventHandlers($name)->add($handler);
}

涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋

涓涓簨浠跺鐞嗙▼搴忓繀椤绘槸涓涓湁鏁堢殑PHP鍥炶皟銆 濡傦紝涓涓寚瀛楀叏灞鍑芥暟鍚嶇殑瀛楃涓叉垨涓涓暟缁勶紝璇ユ暟缁勫寘鍚袱涓厓绱狅紝 绗竴涓厓绱犳槸涓涓璞★紝 绗簩涓厓绱犳槸杩欎釜瀵硅薄鐨勬柟娉曘

涓涓簨浠跺鐞嗙▼搴忓繀椤诲畾涔変负浠ヤ笅鏂瑰紡锛

function handlerName($event) {}
鍏朵腑$event鍖呭惈浜嗕簨浠剁浉鍏崇殑鍙傛暟銆

杩欐槸涓涓檮鍔犱簨浠跺鐞嗙▼搴忕殑绠渚挎柟娉曘 瀹冪瓑浠蜂簬浠ヤ笅浠g爜锛
$component->getEventHandlers($eventName)->add($eventHandler);


浣跨敤getEventHandlers锛屼篃鑳藉鎸囧畾鍚屼釜浜嬩欢鐨勫涓檮鍔犱簨浠跺鐞嗙▼搴忕殑椤哄簭锛 渚嬪锛
$component->getEventHandlers($eventName)->insertAt(0,$eventHandler);
杩欐牱璁剧疆浣垮緱杩欎釜澶勭悊绋嬪簭琚鍏堣皟鐢ㄣ

鍙傝

canGetProperty() 鏂规硶
public boolean canGetProperty(string $name)
$name string 灞炴у悕
{return} boolean 灞炴ф槸鍚﹀彲璇
婧愮爜锛 framework/base/CComponent.php#419 (鏄剧ず)
public function canGetProperty($name)
{
    return 
method_exists($this,'get'.$name);
}

纭畾灞炴ф槸鍚﹀彲璇汇 涓涓畾涔夊湪绫讳腑浜唃etter鏂规硶鐨勫睘鎬с 娉ㄦ剰锛屽睘鎬у悕鏄尯鍒嗗ぇ灏忓啓鐨勩

鍙傝

canSetProperty() 鏂规硶
public boolean canSetProperty(string $name)
$name string 灞炴у悕
{return} boolean 灞炴ф槸鍚﹀彲鍐
婧愮爜锛 framework/base/CComponent.php#432 (鏄剧ず)
public function canSetProperty($name)
{
    return 
method_exists($this,'set'.$name);
}

纭畾灞炴ф槸鍚﹀彲鍐欍 涓涓畾涔夊湪绫讳腑浜唖etter鏂规硶鐨勫睘鎬с 娉ㄦ剰锛屽睘鎬у悕鏄尯鍒嗗ぇ灏忓啓鐨勩

鍙傝

detachBehavior() 鏂规硶
public IBehavior detachBehavior(string $name)
$name string 杩欎釜琛屼负鐨勫悕瀛楋紝瀹冩槸琛屼负鐨勫敮涓鏍囪瘑銆
{return} IBehavior 鍒嗙鍚庣殑琛屼负锛屽鏋滆涓轰笉瀛樺湪杩斿洖null銆
婧愮爜锛 framework/base/CComponent.php#339 (鏄剧ず)
public function detachBehavior($name)
{
    if(isset(
$this->_m[$name]))
    {
        
$this->_m[$name]->detach($this);
        
$behavior=$this->_m[$name];
        unset(
$this->_m[$name]);
        return 
$behavior;
    }
}

浠庣粍浠朵腑鍒嗙涓涓涓恒 杩欎釜琛屼负鐨IBehavior::detach鏂规硶灏嗚璋冪敤銆

detachBehaviors() 鏂规硶
public void detachBehaviors()
婧愮爜锛 framework/base/CComponent.php#304 (鏄剧ず)
public function detachBehaviors()
{
    if(
$this->_m!==null)
    {
        foreach(
$this->_m as $name=>$behavior)
            
$this->detachBehavior($name);
        
$this->_m=null;
    }
}

浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒

detachEventHandler() 鏂规硶
public boolean detachEventHandler(string $name, callback $handler)
$name string 浜嬩欢鍚
$handler callback 闇瑕佽绉婚櫎鐨勪簨浠跺鐞嗙▼搴
{return} boolean 鏄惁绉婚櫎鎴愬姛
婧愮爜锛 framework/base/CComponent.php#525 (鏄剧ず)
public function detachEventHandler($name,$handler)
{
    if(
$this->hasEventHandler($name))
        return 
$this->getEventHandlers($name)->remove($handler)!==false;
    else
        return 
false;
}

鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 杩欎釜鏂规硶鐩稿浜attachEventHandler

鍙傝

disableBehavior() 鏂规硶
public void disableBehavior(string $name)
$name string 琛屼负鐨勫悕瀛椼傚畠鏄涓虹殑鍞竴鏍囪瘑銆
婧愮爜锛 framework/base/CComponent.php#391 (鏄剧ず)
public function disableBehavior($name)
{
    if(isset(
$this->_m[$name]))
        
$this->_m[$name]->setEnabled(false);
}

绂佺敤涓涓檮鍔犺涓恒 涓涓涓轰粎褰撳惎鐢ㄦ椂鎵嶆湁鏁堛

disableBehaviors() 鏂规硶
public void disableBehaviors()
婧愮爜锛 framework/base/CComponent.php#365 (鏄剧ず)
public function disableBehaviors()
{
    if(
$this->_m!==null)
    {
        foreach(
$this->_m as $behavior)
            
$behavior->setEnabled(false);
    }
}

绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒

enableBehavior() 鏂规硶
public void enableBehavior(string $name)
$name string 琛屼负鍚嶇О銆傚畠鏄涓虹殑鍞竴鏍囪瘑銆
婧愮爜锛 framework/base/CComponent.php#380 (鏄剧ず)
public function enableBehavior($name)
{
    if(isset(
$this->_m[$name]))
        
$this->_m[$name]->setEnabled(true);
}

鍚敤涓涓檮鍔犺涓恒 涓涓涓轰粎褰撳惎鐢ㄦ椂鏈夋晥銆 涓涓涓哄湪棣栨闄勫姞鏃跺惎鐢ㄣ

enableBehaviors() 鏂规硶
public void enableBehaviors()
婧愮爜锛 framework/base/CComponent.php#353 (鏄剧ず)
public function enableBehaviors()
{
    if(
$this->_m!==null)
    {
        foreach(
$this->_m as $behavior)
            
$behavior->setEnabled(true);
    }
}

鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒

evaluateExpression() 鏂规硶 锛堝彲鐢ㄨ嚜 v1.1.0锛
public mixed evaluateExpression(mixed $_expression_, array $_data_=array ( ))
$_expression_ mixed 涓涓狿HP琛ㄨ揪寮忔垨PHP鍥炶皟銆
$_data_ array 浼犻掔粰琛ㄨ揪寮忔垨鍥炶皟鐨勯檮鍔犲弬鏁
{return} mixed 琛ㄨ揪寮忕粨鏋
婧愮爜锛 framework/base/CComponent.php#602 (鏄剧ず)
public function evaluateExpression($_expression_,$_data_=array())
{
    if(
is_string($_expression_))
    {
        
extract($_data_);
        return eval(
'return '.$_expression_.';');
    }
    else
    {
        
$_data_[]=$this;
        return 
call_user_func_array($_expression_$_data_);
    }
}

璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆

鏈夋晥鐨凱HP鍥炶皟鏄竴涓被鐨勬柟娉曪紝 鏍煎紡涓篴rray(ClassName/Object, MethodName)鎴栧尶鍚嶅嚱鏁帮紙闇瑕丳HP 5.3.0 鎴栦互涓婄増鏈敮鎸侊級銆

濡傛灉浣跨敤涓涓狿HP鍥炶皟锛屽搴旂殑鍑芥暟鎴栨柟娉曞簲璇ヤ负濡備笅鏍煎紡

function foo($param1, $param2, ..., $component) { ... }
杩欎釜鏂规硶鐨勭浜屼釜鍙傛暟鏄竴涓暟缁勫厓绱狅紝 灏嗕紶閫掔粰鍥炶皟鐨勬柟寮忎负$param1锛$param2锛...锛涙渶鍚庝竴涓弬鏁板皢鏄粍浠剁殑鑷韩銆

濡傛灉浣跨敤涓涓狿HP琛ㄨ揪寮忥紝 绗簩涓弬鏁板皢鎵ц鈥渆xtracted鈥濇彃鍏HP鍙橀噺鍙互鍦ㄨ〃杈惧紡涓洿鎺ヤ娇鐢ㄣ傚弬瑙PHP extract 浜嗚В鏇磋缁嗕俊鎭傚湪琛ㄨ揪寮忎腑缁勪欢瀵硅薄鍙互浣跨敤$this璁块棶銆

getEventHandlers() 鏂规硶
public CList getEventHandlers(string $name)
$name string 浜嬩欢鍚
{return} CList 涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃
婧愮爜锛 framework/base/CComponent.php#466 (鏄剧ず)
public function getEventHandlers($name)
{
    if(
$this->hasEvent($name))
    {
        
$name=strtolower($name);
        if(!isset(
$this->_e[$name]))
            
$this->_e[$name]=new CList;
        return 
$this->_e[$name];
    }
    else
        throw new 
CException(Yii::t('yii','Event "{class}.{event}" is not defined.',
            array(
'{class}'=>get_class($this), '{event}'=>$name)));
}

杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆

hasEvent() 鏂规硶
public boolean hasEvent(string $name)
$name string 浜嬩欢鍚
{return} boolean whether 浜嬩欢鏄惁瀹氫箟
婧愮爜锛 framework/base/CComponent.php#444 (鏄剧ず)
public function hasEvent($name)
{
    return !
strncasecmp($name,'on',2) && method_exists($this,$name);
}

纭畾涓涓簨浠舵槸鍚﹀畾涔夈 涓涓簨浠跺湪瀹氫腑鐨勫畾涔変负绫讳技鈥榦nXXX鈥欒繖鏍风殑鏂规硶銆 娉ㄦ剰锛屼簨浠跺悕鏄尯鍒嗗ぇ灏忓啓鐨勩

hasEventHandler() 鏂规硶
public boolean hasEventHandler(string $name)
$name string 浜嬩欢鍚
{return} boolean 浜嬩欢鏄惁闄勫姞浜嗕竴涓垨澶氫釜澶勭悊绋嬪簭
婧愮爜锛 framework/base/CComponent.php#454 (鏄剧ず)
public function hasEventHandler($name)
{
    
$name=strtolower($name);
    return isset(
$this->_e[$name]) && $this->_e[$name]->getCount()>0;
}

妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋

hasProperty() 鏂规硶
public boolean hasProperty(string $name)
$name string 灞炴у悕
{return} boolean 灞炴ф槸鍚﹀畾涔
婧愮爜锛 framework/base/CComponent.php#406 (鏄剧ず)
public function hasProperty($name)
{
    return 
method_exists($this,'get'.$name) || method_exists($this,'set'.$name);
}

纭畾灞炴ф槸鍚﹁瀹氫箟銆 涓涓畾涔夊湪绫讳腑浜唃etter 鎴 setter 鏂规硶鐨勫睘鎬с 娉ㄦ剰锛屽睘鎬у悕鏄尯鍒嗗ぇ灏忓啓鐨勩

raiseEvent() 鏂规硶
public void raiseEvent(string $name, CEvent $event)
$name string 浜嬩欢鍚
$event CEvent 浜嬩欢鍙傛暟
婧愮爜锛 framework/base/CComponent.php#541 (鏄剧ず)
public function raiseEvent($name,$event)
{
    
$name=strtolower($name);
    if(isset(
$this->_e[$name]))
    {
        foreach(
$this->_e[$name] as $handler)
        {
            if(
is_string($handler))
                
call_user_func($handler,$event);
            else if(
is_callable($handler,true))
            {
                if(
is_array($handler))
                {
                    
// an array: 0 - object, 1 - method name
                    
list($object,$method)=$handler;
                    if(
is_string($object))    // static method call
                        
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 
// PHP 5.3: anonymous function
                    
call_user_func($handler,$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}'=>gettype($handler))));
            
// stop further handling if param.handled is set true
            
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)));
}

鍙戣捣涓涓簨浠躲 杩欎釜鏂规硶琛ㄧず鍙戣捣涓涓簨浠躲 瀹冭皟鐢ㄤ簨浠剁殑鎵鏈夐檮鍔犲鐞嗙▼搴忋

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.