yskl 发表于 2018-2-11 12:10:48


            本文实例讲述了Yii框架组件和事件行为管理。分享给大家供大家参考,具体如下:
Yii是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。CComponent几乎是所有类的基类,它控制着组件与事件的管理,其方法与属性如下,私有变量$_e数据存放事件(evnet,有些地方叫hook),$_m数组存放行为(behavior)。
http://files.jb51.net/file_images/article/201605/2016520122810912.jpg?2016420122839
组件管理
YII是一个纯oop框架,很多类中的成员变量的受保护或者私有的,CComponent中利用php中的魔术方法__get(),__set()来访问和设置属性,但这些方法的作用远不指这些。下面用__get()来说明
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)));
}
页: [1]
查看完整版本: Yii框架组件和事件行为管理详解