手机版

Yii框架核心组件类示例详解

时间:2021-08-21 来源:互联网 编辑:宝哥软件园 浏览:

本文阐述了Yii框架的核心组件类。分享给大家参考,如下:

组件类为YII框架中基于组件和事件驱动的编程提供了基础,YII框架中的大多数分类都使用组件类作为基类。

组件类为其子类提供了三个特性:

1.成员变量扩展

通过定义两个成员函数(getXXX/setXXX)来定义成员变量,例如:

public function gettext(){…} public function settext {…}相当于定义一个$text成员变量,可以这样调用

$ a=新组件;$ a=$ component-text;//相当于$ a=$ component-getText();$ component-text=' ABC ';//相当于$ component-settext(' ABC ');组件使用魔术方法__get和__set实现“成员变量扩展”的特性。如果对类本身不存在的成员变量进行操作,php将调用这个类的__get和__set方法进行处理。组件利用这两种神奇的方法实现了“成员变量扩展”的特性。下图描述了CComponent的一个子类,它添加了两个成员变量,active和sessionName,并描述了这两个成员变量的调用过程。

Posted  Image

在面向对象编程中直接定义一个成员变量就足够了。为什么组件通过定义两个函数来实现成员变量?其中一个主要原因是有必要“延迟加载”成员变量。一般一个类的成员变量在构造函数或初始化函数中统一赋值,但并不是每个成员变量都会在处理web请求的过程中用到,相比之下App类中定义了两个成员变量:$cache和$db($cache是cache对象,$db是数据库链接对象)。这两个对象是在App类初始化的时候创建的,但是一个网站的某些页面的内容是可以通过缓存获取的,所以不需要创建数据库链接对象。如果将App定义为CComponent的子类,则在App类中定义了两种方法:getCache/getDb,这样在首次使用Db成员变量时可以调用getDb函数初始化数据库链接,从而实现——的延迟加载,也就是首次使用时的初始化。虽然延迟加载会增加一个函数调用,但可以减少成员变量不必要的初始化(实际上提高了访问网站的速度),可以使我们的代码更容易维护和扩展。

延迟加载应该是“成员变量扩展”功能最重要的目的,当然这个功能还会有其他的用途。想想看,当你操作一个成员变量的时候,其实是在调用getXXX和setXXX成员函数,你在调用一段代码!

2.事件模型

事件模型是设计模式中的“观察者模式”:当一个对象的状态改变时,这个对象可以将事件通知其他对象。

为了使用事件模型,需要实现这三个步骤:1。定义事件;2.注册事件句柄;3.触发事件。CComponent的子类通过定义以on开头的成员函数来定义事件,例如:public function onClick(){…},然后通过调用attachEventHandler成员函数来注册事件处理程序(可以注册多个事件处理程序),最后通过调用raiseEvent来触发事件。

类组件使用私有成员变量保存事件和处理事件的所有句柄。成员变量可以看作是一个哈希表,其关键字是事件的名称,其值是事件处理函数的链表。

Posted  Image

3.行为类绑定

有两种方法可以向类中添加功能:1。直接修改这个类的代码,增加一些成员函数和成员变量;2.通过子类派生和扩展。显然,第二种方法更容易维护和扩展。如果需要给一个类增加多个特征(不同时期的人很多),就需要进行多级衍生,明显增加了维护成本。

CComponent以一种特殊的方式将——行为类绑定扩展到类信息。行为类是cbbehavior的子类,Component可以给自己添加一个或多个cbbehavior类的成员函数和成员变量,不需要的时候卸载一些cbbehavior类。下面是一个简单的例子:

//计算器类类计算器扩展了cbehavior {public function add ($ x,$ y) {return $ x,$ y;}公共函数sub($x,$ y){ return $ x $ y;}…} $ comp=new CComponent();//将计算器函数$ comp-attach behavior(' calculator ',newcalculator())添加到我的类中;$comp-add(2,5);$comp-sub(2,5);组件通过__get,__set和__call三种神奇的方法实现了“行为类绑定”的特性。调用组件类中不存在的成员变量和成员方法时,组件类会通过这些神奇的方法找到“动态绑定行为对象”。也就是说,不存在的成员变量和成员方法被路由到动态绑定对象。

Posted  Image

你可以用三句话概括组件类的特点:

1.更好地配置对象。设置对象的成员变量时,实际上是在运行一段代码;2.更好地监控对象。当对象内部状态发生变化时,可以通知其他对象;3.更好地扩展对象可以为对象添加成员变量和成员函数,还可以监控对象的状态。

更多对Yii相关内容感兴趣的读者,请查看本网站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》、《php常见数据库操作技巧汇总》

希望本文对基于Yii框架的PHP编程有所帮助。

版权声明:Yii框架核心组件类示例详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。