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 瀹炵幇浜嗗畾涔夈佷娇鐢ㄥ睘鎬у拰浜嬩欢鐨勫崗璁
灞炴ф槸閫氳繃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); }鍏朵腑
$event
鏄CEvent鎴栧畠鐨勫瓙绫荤殑涓涓疄渚嬨
浣犲彲鐩存帴璋冪敤涓涓柟娉曟潵浠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 |
鏂规硶璇︾粏
public mixed __call(string $name, array $parameters)
| ||
$name | string | 鏂规硶鍚 |
$parameters | array | 鏂规硶鍙傛暟 |
{return} | mixed | 鏂规硶杩斿洖鍊 |
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鐨勯瓟鏈柟娉曪紝 瀹炵幇浜嗚繖涓涓哄姛鑳姐
public mixed __get(string $name)
| ||
$name | string | 灞炴у悕鎴栦簨浠跺悕 |
{return} | mixed | 灞炴у硷紝闄勫姞鐨勪簨浠跺鐞嗙▼搴忔垨涓涓鍚嶇О |
public function __get($name)
{
$getter='get'.$name;
if(method_exists($this,$getter))
return $this->$getter();
else if(strncasecmp($name,'on',2)===0 && 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;
鍙傝
public boolean __isset(string $name)
| ||
$name | string | 灞炴у悕鎴栦簨浠跺悕 |
{return} | boolean |
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 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()妫娴嬬粍浠跺睘鎬ф槸鍚﹀凡璁剧疆銆
public mixed __set(string $name, mixed $value)
| ||
$name | string | 灞炴у悕鎴栬呬簨浠跺悕 |
$value | mixed | 灞炴у兼垨鍥炶皟 |
{return} | mixed |
public function __set($name,$value)
{
$setter='set'.$name;
if(method_exists($this,$setter))
return $this->$setter($value);
else if(strncasecmp($name,'on',2)===0 && 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;
鍙傝
public mixed __unset(string $name)
| ||
$name | string | 灞炴у悕鎴栦簨浠跺悕 |
{return} | mixed |
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(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銆
public IBehavior asa(string $behavior)
| ||
$behavior | string | 琛屼负鍚 |
{return} | IBehavior | 杩斿洖琛屼负瀵硅薄锛屽鏋滆涓哄璞′笉瀛樺湪锛屽垯杩斿洖null銆 |
public function asa($behavior)
{
return isset($this->_m[$behavior]) ? $this->_m[$behavior] : null;
}
杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° 鈥榓sa鈥欎唬琛ㄢ榓s a鈥欍
public IBehavior attachBehavior(string $name, mixed $behavior)
| ||
$name | string | 琛屼负鐨勫悕瀛楋紝瀹冨簲璇ユ槸鍞竴琛屼负鏍囪瘑銆 |
$behavior | mixed | 杩欎釜琛屼负鐨勯厤缃紝瀹冮鍏堥氳繃杩欎釜鍙傛暟锛 璋冪敤YiiBase::createComponent鍒涘缓琛屼负瀵硅薄銆 |
{return} | IBehavior | 琛屼负瀵硅薄 |
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鏂规硶杩涜鍒濆鍖栥
public void attachBehaviors(array $behaviors)
| ||
$behaviors | array | 闄勫姞鍒扮粍浠剁殑涓涓涓哄垪琛 |
public function attachBehaviors($behaviors)
{
foreach($behaviors as $name=>$behavior)
$this->attachBehavior($name,$behavior);
}
闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 姣忎竴涓涓烘槸涓涓 IBehavior瀹炰緥锛屼娇鐢ㄥ瓧绗︿覆鎸囧畾涓涓涓虹被锛 鎴栦娇鐢ㄤ竴涓涓嬬粨鏋勭殑鏁扮粍鏉ユ寚瀹氾細
array( 'class'=>'path.to.BehaviorClass', 'property1'=>'value1', 'property2'=>'value2', )
public void attachEventHandler(string $name, callback $handler)
| ||
$name | string | 浜嬩欢鍚 |
$handler | callback | 浜嬩欢澶勭悊绋嬪簭 |
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);杩欐牱璁剧疆浣垮緱杩欎釜澶勭悊绋嬪簭琚鍏堣皟鐢ㄣ
public boolean canGetProperty(string $name)
| ||
$name | string | 灞炴у悕 |
{return} | boolean | 灞炴ф槸鍚﹀彲璇 |
public function canGetProperty($name)
{
return method_exists($this,'get'.$name);
}
纭畾灞炴ф槸鍚﹀彲璇汇 涓涓畾涔夊湪绫讳腑浜唃etter鏂规硶鐨勫睘鎬с 娉ㄦ剰锛屽睘鎬у悕鏄尯鍒嗗ぇ灏忓啓鐨勩
鍙傝
public boolean canSetProperty(string $name)
| ||
$name | string | 灞炴у悕 |
{return} | boolean | 灞炴ф槸鍚﹀彲鍐 |
public function canSetProperty($name)
{
return method_exists($this,'set'.$name);
}
纭畾灞炴ф槸鍚﹀彲鍐欍 涓涓畾涔夊湪绫讳腑浜唖etter鏂规硶鐨勫睘鎬с 娉ㄦ剰锛屽睘鎬у悕鏄尯鍒嗗ぇ灏忓啓鐨勩
鍙傝
public IBehavior detachBehavior(string $name)
| ||
$name | string | 杩欎釜琛屼负鐨勫悕瀛楋紝瀹冩槸琛屼负鐨勫敮涓鏍囪瘑銆 |
{return} | IBehavior | 鍒嗙鍚庣殑琛屼负锛屽鏋滆涓轰笉瀛樺湪杩斿洖null銆 |
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鏂规硶灏嗚璋冪敤銆
public void detachBehaviors()
|
public function detachBehaviors()
{
if($this->_m!==null)
{
foreach($this->_m as $name=>$behavior)
$this->detachBehavior($name);
$this->_m=null;
}
}
浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒
public boolean detachEventHandler(string $name, callback $handler)
| ||
$name | string | 浜嬩欢鍚 |
$handler | callback | 闇瑕佽绉婚櫎鐨勪簨浠跺鐞嗙▼搴 |
{return} | boolean | 鏄惁绉婚櫎鎴愬姛 |
public function detachEventHandler($name,$handler)
{
if($this->hasEventHandler($name))
return $this->getEventHandlers($name)->remove($handler)!==false;
else
return false;
}
鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 杩欎釜鏂规硶鐩稿浜attachEventHandler銆
public void disableBehavior(string $name)
| ||
$name | string | 琛屼负鐨勫悕瀛椼傚畠鏄涓虹殑鍞竴鏍囪瘑銆 |
public function disableBehavior($name)
{
if(isset($this->_m[$name]))
$this->_m[$name]->setEnabled(false);
}
绂佺敤涓涓檮鍔犺涓恒 涓涓涓轰粎褰撳惎鐢ㄦ椂鎵嶆湁鏁堛
public void disableBehaviors()
|
public function disableBehaviors()
{
if($this->_m!==null)
{
foreach($this->_m as $behavior)
$behavior->setEnabled(false);
}
}
绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒
public void enableBehavior(string $name)
| ||
$name | string | 琛屼负鍚嶇О銆傚畠鏄涓虹殑鍞竴鏍囪瘑銆 |
public function enableBehavior($name)
{
if(isset($this->_m[$name]))
$this->_m[$name]->setEnabled(true);
}
鍚敤涓涓檮鍔犺涓恒 涓涓涓轰粎褰撳惎鐢ㄦ椂鏈夋晥銆 涓涓涓哄湪棣栨闄勫姞鏃跺惎鐢ㄣ
public void enableBehaviors()
|
public function enableBehaviors()
{
if($this->_m!==null)
{
foreach($this->_m as $behavior)
$behavior->setEnabled(true);
}
}
鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒
public mixed evaluateExpression(mixed $_expression_, array $_data_=array (
))
| ||
$_expression_ | mixed | 涓涓狿HP琛ㄨ揪寮忔垨PHP鍥炶皟銆 |
$_data_ | array | 浼犻掔粰琛ㄨ揪寮忔垨鍥炶皟鐨勯檮鍔犲弬鏁 |
{return} | mixed | 琛ㄨ揪寮忕粨鏋 |
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璁块棶銆
public CList getEventHandlers(string $name)
| ||
$name | string | 浜嬩欢鍚 |
{return} | CList | 涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃 |
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)));
}
杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆
public boolean hasEvent(string $name)
| ||
$name | string | 浜嬩欢鍚 |
{return} | boolean | whether 浜嬩欢鏄惁瀹氫箟 |
public function hasEvent($name)
{
return !strncasecmp($name,'on',2) && method_exists($this,$name);
}
纭畾涓涓簨浠舵槸鍚﹀畾涔夈 涓涓簨浠跺湪瀹氫腑鐨勫畾涔変负绫讳技鈥榦nXXX鈥欒繖鏍风殑鏂规硶銆 娉ㄦ剰锛屼簨浠跺悕鏄尯鍒嗗ぇ灏忓啓鐨勩
public boolean hasEventHandler(string $name)
| ||
$name | string | 浜嬩欢鍚 |
{return} | boolean | 浜嬩欢鏄惁闄勫姞浜嗕竴涓垨澶氫釜澶勭悊绋嬪簭 |
public function hasEventHandler($name)
{
$name=strtolower($name);
return isset($this->_e[$name]) && $this->_e[$name]->getCount()>0;
}
妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋
public boolean hasProperty(string $name)
| ||
$name | string | 灞炴у悕 |
{return} | boolean | 灞炴ф槸鍚﹀畾涔 |
public function hasProperty($name)
{
return method_exists($this,'get'.$name) || method_exists($this,'set'.$name);
}
纭畾灞炴ф槸鍚﹁瀹氫箟銆 涓涓畾涔夊湪绫讳腑浜唃etter 鎴 setter 鏂规硶鐨勫睘鎬с 娉ㄦ剰锛屽睘鎬у悕鏄尯鍒嗗ぇ灏忓啓鐨勩
public void raiseEvent(string $name, CEvent $event)
| ||
$name | string | 浜嬩欢鍚 |
$event | CEvent | 浜嬩欢鍙傛暟 |
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)));
}
鍙戣捣涓涓簨浠躲 杩欎釜鏂规硶琛ㄧず鍙戣捣涓涓簨浠躲 瀹冭皟鐢ㄤ簨浠剁殑鎵鏈夐檮鍔犲鐞嗙▼搴忋