pythonyield使用场景(Yii框架核心组件类实例详解)
pythonyield使用场景
Yii框架核心组件类实例详解本文实例讲述了yii框架核心组件类。分享给大家供大家参考,具体如下:
ccomponent类为yii框架的基于组件和事件驱动编程提供了基础,yii框架中的大部分类都将ccomponent类作为基类。
ccomponent类为它的子类提供3个特性:
1、成员变量扩展
通过定义两个成员函数(getxxx/setxxx)来定义一个成员变量,比如:
|
public function gettext () {…} public function settext {…} |
这样就相当于定义了一个$text成员变量,可以这样调用
|
$a = new ccomponent; $a = $component ->text; // 等价于$a=$component->gettext(); $component ->text= 'abc' ; // 等价于$component->settext(‘abc'); |
ccomponent是通过魔术方法__get和__set来实现“成员变量扩展”特性的,如果对类本身不存在的成员变量进行操作时,php会调用这个类 的__get和__set方法来进行处理。ccomponent利用这两个魔术方法实现了“成员变量扩展”特性。下图描述了一个ccomponent的子 类,它增加了active和sessionname两个成员变量,该图描述了对于这两个成员变量的调用流程。
面向对象编程中直接定义一个成员变量就可以了,为什么ccomponent要通过定义2个函数来实现一个成员变量呢?一个主要得原因是需要对成员变 量进行“延时加载”,一般情况下类的成员变量是在构造函数或者初始化函数进行统一赋值,但是在一次web请求的处理过程中不是每个成员变量都会被使用,比 如app类中定义了两个成员变量:$cache和$db($cache是一个缓存对象,$db是一个数据库链接对象),这两个对象在app类初始化的时候 创建,但是一个web网站的有些页面,它内容可以通过缓存获取,那么数据库链接对象其实就不需要创建。如果将app定义为ccomponent的子类,在 app类中定义两个方法:getcache/getdb,这样就可以做到第一次使用db成员变量的时候,才调用getdb函数来进行数据库链接的初始化, 从而实现延时加载——即在第一次使用时进行初始化。虽然延时加载会增加一次函数调用,但是可以减少不必要的成员变量的初始化(总体上其实是提升了网站的访 问速度),而且可以使得我们的代码更加易维护、易扩展。
延时加载应该是“成员变量扩展”特性的最重要的用途,当然这个特性还会有其它用途,想一想,当你操作一个成员变量的时候,你其实是在调用getxxx和setxxx成员函数,你是在调用一段代码!
2、事件模型
事件模型就是设计模式中的“观察者模式”:当对象的状态发生了变化,那么这个对象可以将该事件通知其它对象。
为了使用事件模型,需要实现这三个步骤:1、定义事件;2、注册事件句柄;3、触发事件。
ccomponent的子类通过定义一个以on打头的成员函数来定义一个事件,比如:public function onclick(){…},接着通过调用attacheventhandler成员函数来注册事件句柄(可以注册多个事件句柄),最后通过调用 raiseevent来触发事件。
ccomponent类使用一个私有的成员变量来保存事件以及处理该事件的所有句柄,该成员变量可以看作一个hash表,hash表的key是事件的名称,hash表的value是事件处理函数链表。
3、行为类绑定
有两种办法可以对类添加特性:1、直接修改这个类的代码,添加一些成员函数和成员变量;2、派生,通过子类来扩展。很明显第二种方法更加易维护、易扩展。如果需要对一个类添加多个特性(多人在不同时期),那么需要进行多级派生,这显然加大了维护成本。
ccomponent使用一种特殊的方式对类信息扩展——行为类绑定。行为类是一个cbehavior的子类,ccomponent可以将一个或者多个 cbehavior类的成员函数和成员变量添加到自己身上,并且在不需要的时候卸载掉某些cbehavior类。下面是一个简单的例子:
|
//计算器类 class calculator extends cbehavior { public function add( $x , $y ) { return $x + $y ; } public function sub( $x , $y ) { return $x – $y ; } … } $comp = new ccomponent(); //为我的类添加计算器功能 $comp ->attachbehavior(‘calculator', new calculator()); $comp ->add(2, 5); $comp ->sub(2, 5); |
ccomponent通过__get、__set和__call这3个魔术方法来实现“行为类绑定”这个特性,当调用ccomponent类不存在的成员 变量和成员方法的时候,ccomponent类会通过这三个魔法方法在“动态绑定的行为对象”上进行查找。即将不存在的成员变量和成员方法路由到“动态绑 定对象”上。
可以用3句话来总结ccomponent类的特性:
1、 更好的配置一个对象,当设置对象的成员变量的时候,其实是运行一段代码;
2、 更好的监听一个对象,当对象的内部状态发生变化的时候,其它对象可以得到通知;
3、 更好的扩展一个对象,可以给一个对象增加成员变量和成员函数,还能监听这个对象的状态。
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/ltx06/article/details/52330772
- yield函数详解(Yii框架的redis命令使用方法简单示例)
- yield代码还会执行吗(Yii2 queue的队列使用详解)
- yii框架使用教程(Yii框架连表查询操作示例)
- webapp前端能用yii2开发吗(Yii Framework框架使用PHPExcel组件的方法示例)
- yii框架的常用组件使用(Yii框架的布局文件实例分析)
- yii2支持php7.2吗(Yii框架通过请求组件处理get,post请求的方法分析)
- apache和yii域名配置(yii框架数据库关联查询操作示例)
- 如何让yii2高级模板运行起来(Yii框架Session与Cookie使用方法示例)
- yii框架使用教程(Yii框架分页技术实例分析)
- yield方法可以使一个线程停止运行(Yii2.0框架模型添加/修改/删除数据操作示例)
- python如何使用yield(YII2.0框架行为Behavior深入详解)
- 使用mui制作页面案例(Yii框架页面渲染操作实例详解)
- yii2 在控制器中验证请求参数的使用方法(yii2 在控制器中验证请求参数的使用方法)
- yii2对比springboot(Yii框架响应组件用法实例分析)
- yii2对比springboot(Yii框架函数简单用法分析)
- php使用yield处理并发(Yii框架中使用PHPExcel的方法分析)
- 学好汉语拼音,从娃娃绕口令抓起,平时还是要多练 收藏好(从娃娃绕口令抓起)
- 仙女们的私藏鲜法大PK 鲜香切块牛肉(仙女们的私藏鲜法大PK)
- 天热没胃口 这道菜开胃又下饭,2个小技巧新手一学就会(这道菜开胃又下饭)
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9