月归档:2010 年十一月

【转】Yii PHP 框架分析(三)

Yii PHP 框架分析(三)作者:wdy http://hi.baidu.com/delphiss/blog/item/357663d152c0aa85a1ec9c44.html Yii应用的入口脚本引用出了Yii类,Yii类的定义: class Yii extends YiiBase{} 由yiic创建的应用里Yii类只是YiiBase类的“马甲”,我们也可以根据需求定制自己的Yii类。 Yii(即YiiBase)是一个“helper class”,为整个应用提供静态和全局访问入口。 Yii类的几个静态成员:$_aliases : 存放系统的别名对应的真实路径$_imports : $_classes :$_includePaths php include paths$_app : CWebApplication对象,通过 Yii::app() 访问到$_logger : 系统日志对象 $_app 对象由 Yii::createWebApplication() 方法创建。 类自动加载 Yii基于php5的autoload机制来提供类的自动加载功能,自动加载器为YiiBase类的静态方法autoload()。 当程序中用new创建对象或访问到类的静态成员,php将类名传递给类加载器,由类加载器完成类文件的include。 autoload机制实现了类的“按需导入”,就是系统访问到类时才include类的文件。 YiiBase类的静态成员$_coreClasses 里预先存放了Yii自身的核心类名于对应的类文件路径。其他的Yii应用中用到的类可以用Yii::import() 导入,Yii::import()将单类的与对应类文件存放于$_classes中,以*通配符表示的路径加入到php include_path中。被Yii::import()导入的类文件或目录都记入$_imports中,避免多次导入。 /* … 继续阅读

发表在 Php | 标签为 , | 留下评论

【转】Yii PHP 框架分析(二)

Yii PHP 框架分析(二)作者:wdy http://hi.baidu.com/delphiss/blog/item/54597af595085ad3f3d38552.html Yii是基于组件(component-based)的web框架,CComponent类是所有组件的基类。 CComponent类为子类提供了基于属性(property)、事件(event)、行为(behavior)编程接口。 组件的属性(property) Ccomponent类并没有提供属性的变量存储,需要由子类来提供两个方法来实现。子类的getPropertyName()方法提供$component->PropertyName的取值操作数据,子类的setPropertyName($val)方法提供$component->PropertyName赋值操作。 $width=$component->textWidth;     // 获取 textWidth 属性 实现方式为调用子类提供的方法 $width=$component->getTextWidth() $component->textWidth=$width;     // 设置 textWidth 属性 实现方式为调用子类提供的方法 $component->setTextWidth($width) public function getTextWidth(){    return $this->_textWidth;} public function setTextWidth($value){    $this->_textWidth=$value;} 组件的属性值是大小写不敏感的(类的成员时大小写敏感的) 组件的事件(event) 组件事件是一种特殊的属性,它可以将事件处理句柄(可以是函数名、类方法或对象方法)注册(绑定)到一个事件名上,句柄在事件被唤起的时候被自动调用。组件事件存放在CComponent 的$_e[]数组里,数组的键值为事件的名字,键值的数值为一个Clist对象,Clist是Yii提供的一个队列容器,Clist的方法add()添加事件的回调handle。 //添加一个全局函数到事件处理$component-> onBeginRequest=”logRequest”;//添加一个类静态方法到事件处理$component-> onBeginRequest=array(“CLog”,” logRequest”);//添加一个对象方法到事件处理$component-> onBeginRequest=array($mylog,” … 继续阅读

发表在 Php | 标签为 | 留下评论

【转】Yii PHP 框架分析 (一)

Yii PHP 框架分析 (一)作者:wdy http://hi.baidu.com/delphiss/blog/item/f7da86d787adb72506088b4b.html 基于yii1.0.8的代码分析的。用了一个下午整理的,流水账,感兴趣的凑合着先看,国庆期间推出个整理修改版,然后再完成后两个部分(MVC和Yii的整体结构分析)。 1. 启动 网站的唯一入口程序 index.php : $yii=dirname(__FILE__).’/../framework/yii.php’;$config=dirname(__FILE__).’/protected/config/main.php’; // remove the following line when in production modedefined(‘YII_DEBUG’) or define(‘YII_DEBUG’,true); require_once($yii);Yii::createWebApplication($config)->run(); 上面的require_once($yii) 引用出了后面要用到的全局类Yii,Yii类是YiiBase类的完全继承: class Yii extends YiiBase{} 系统的全局访问都是通过Yii类(即YiiBase类)来实现的,Yii类的成员和方法都是static类型。 2. 类加载 Yii利用PHP5提供的spl库来完成类的自动加载。在YiiBase.php 文件结尾处 spl_autoload_register(array(‘YiiBase’,’autoload’)); 将YiiBase类的静态方法autoload 注册为类加载器。 PHP autoload … 继续阅读

发表在 Php | 标签为 , , | 留下评论

【转】UCHOME2.0缓存机制分析 uchome,uchome2.0,uchome2.0分析,uchome缓存

缓存分为“模板文件缓存”、“模块数据缓存”、“系统配置缓存”以及“其他缓存” 模板文件缓存机制(采用从顶向下的方法来分析) 1:在要显示的页面通过include template($name) 语句来包含被编译后的模板文件 2:template($name)函数解释 大致过程为如果模板缓存文件不存在则重新编译模板文件,存在则直接调用缓存文件以显示 3:模板文件编译:parse_template($tpl) 传递的参数:为不包含文件类型后缀的完整文件路径 函数功能:替换掉模板标签,使其编译成PHP代码 模块数据缓存 A:管理员在后台可以设置是否进行模块缓存以及一文本模式缓存还是储存到数据库,同时还可以设置时储存到一个表还是多个表中。 若选在储存在数据库中,则被保存于cache cahe1 chae2 这些表中,若储存在文本中,则文本被存放于/data/block_cache 中。 B:设置数据被储存在config表中,一键值对的形式储存 C:所有模块缓存的更新周期是在代码中事先设定好的不能设置的,只能通过后台手动一次性的更新模块缓存, D:当手动更新缓存之后,通过block_data_cache();函数进行缓存更新,也就是清除所有模块缓存 模块缓存的产生 A:在后台数据调用功能处设置添加模块 B:之后会生成一个模块调用代码 C:模块数据被储存在block表中 未完…………… 系统配置缓存 A:管理员在后台设置好系统配置 B:数据被写入config表中 ,一键值对的形式存储 C:在common.php文件中,检测系统配置缓存文件dada_config.php是否存在,若存在则调用 不存在则生成系统配置缓存文件。$_SCONFIG数组用来储存系统配置数据的 D:其他缓存 通过该语句之后包含APP缓存与他、用户APP缓存等缓存文件 首页缓存(随便看看缓存) 首页一般是通过source/network.php文件来控制的,所以这里分析随便看看(network)的缓存 一:随便看看配置缓存 A:在管理员后台的随便看看处设置,将设置要显示的数目以及类别全部存在缓存文件 datadata_network.php 中,而不存入数据库 B:在source/network.php中调用该配置缓存文件 … 继续阅读

发表在 Uchome | 标签为 , | 留下评论