位置: 编程技术 - 正文

Yii框架组件和事件行为管理详解(yii框架的优点及原理)

编辑:rootadmin

推荐整理分享Yii框架组件和事件行为管理详解(yii框架的优点及原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yii2框架,yii框架怎么样,yii框架怎么样,组件和框架区别,yii2.0框架,yii框架怎么样,yii框架设计模式,yii框架的优点及原理,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了Yii框架组件和事件行为管理。分享给大家供大家参考,具体如下:

Yii是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。CComponent几乎是所有类的基类,它控制着组件与事件的管理,其方法与属性如下,私有变量$_e数据存放事件(evnet,有些地方叫hook),$_m数组存放行为(behavior)。

组件管理

YII是一个纯oop框架,很多类中的成员变量的受保护或者私有的,CComponent中利用php中的魔术方法__get(),__set()来访问和设置属性,但这些方法的作用远不指这些。下面用__get()来说明

当CComponent或者其子类对象实例$obj->name的时候,__get($name)方法:

1、首先判断实例中是否有getName()方法,如果有则返回 ,如果没有执行第2步

2、判断是否是以on开头的,以on开头的一般都是CComponent子类中预留的事件,用与挂在事件,通过method_exists($this,$name)判断该name是否存在类的实例中,如果存在,返回事件,否则执行第3步

3、如果name存在行为数组中,返回改行为,如果不存在,执行第4步

Yii框架组件和事件行为管理详解(yii框架的优点及原理)

4、遍历行为数组,数组中行为是CBehavior子类的实例,而CBehavior又是CComponent中子类,所以用递归的方法获取行为中的方法,如果没有,执行第5步

5、抛出异常:请求的属性不存在。

在CComponent子类中可以重载__get()方法,如在CModule中加入了获取组件的判断。这就注意一个问题了属性和组件名最好不要重名,因为程序会优先加载组件,可能得到的不是我们想要的属性,如果必须重名的话,就要用getter获取属性。

关于组件的加载与创建,上篇YII框架分析笔记1:YII执行流程中的第3点中有个疑问:注册框架核心组件的时候一下子加载这么多,是不是影响性能呢?其实没有,注册的时候只是把组件和其对应的配置用键值对的形式保存在数组中(预加载的除外),当用到时候才像上面那样去创建组件,会通过YIIBase中的createComponent()方法创建,并初始化。通过CModule或其子孙类(如CWebApplication)调用__get()或getComponent()获取组件时,CModule通过$_components数组建立对象池,确保每个组件在一次请求中只实例化一次。

事件行为管理

事件相当于对一个组件的扩展或者插件,以组件中预留的钩子实现组件内部调用外部、外部对组件部分控制。在CComponent子类中可以定义以on开头的方法为事件,类似于js中的onclick、onchange等,其实原理差不多。所有事件是与CComponent在同一文件中CEvent的子类。

比如在CApplication中调用run()方法在处理请求之前先判断外部是否传人onBeginRequest事件的句柄,如果有则通过onBeginRequest($event)方法调用CComponent中的raiseEvent()方法执行句柄中的函数或者方法。

行为是事件的升级版,所有的行为都是CBehavior的子类。分析上面的__get()方法分析第4步可以看出来行为的作用是完全扩展组件的特性,可以是属性、方法、事件甚至行为,这样使程序开发更加灵活。

行为的另一个作用是将相似事件句柄放在一起,在行为执行attach()方法的时候会将events()方法中返回的事件句柄绑定,这样做达到方面管理和扩展的目的。比如CModelBehavior中将model相关的事件集中起来,便于其子类的复用,当我们需求为model添加行为的时候可以继承它。

PS:小编在这里推荐一款本站的php格式化美化的排版工具帮助大家在以后的PHP程序设计中进行代码排版:

php代码在线格式化美化工具:

在Laravel框架里实现发送邮件实例(邮箱验证) 在经过一段时间的使用后,发现在项目中很多地方需要用到用户验证,以短信验证和邮箱验证为主流趋势,此篇文章小编给大家总结了如何在Laravel框架中实

smarty自定义函数用法示例 本文实例讲述了smarty自定义函数用法。分享给大家供大家参考,具体如下:phprequire_once"smarty.config.php";//自定义一个函数//调用方法:{test1times="4"size="5"con

自定义min版smarty模板引擎MinSmarty.class.php文件及用法 本文实例讲述了自定义的min版smarty模板引擎MinSmarty.class.php文件。分享给大家供大家参考,具体如下:一、smarty的优点smarty是一个使用PHP写出来的模板引

标签: yii框架的优点及原理

本文链接地址:https://www.jiuchutong.com/biancheng/294804.html 转载请保留说明!

上一篇:Yii框架表单模型和验证用法(表单建模)

下一篇:在Laravel框架里实现发送邮件实例(邮箱验证)(laravel框架关键技术解析)

  • 耕地占用税计入无形资产吗
  • 开的劳务费怎么做账
  • 财务报表审计的标准
  • 客户发票弄丢了应该如何补救
  • 增值税税率调整为9%
  • 提交印花税会计分录
  • 什么时候确认应收股利
  • 费用已支付但发票未收可以先记费用吗
  • 利润表没有其他业务收入
  • 小规模增值税申报表如何填报
  • 股权评估与资产评估的关系
  • 公司内部食堂招待费账务处理
  • 福利费进项税可以抵扣
  • 城市维护建设税税率
  • 员工离职公司需要办理什么手续
  • 去年的定额的发票可以报销吗?
  • 农产品所得税扣除比例
  • 对方收到发票不付款怎么办
  • 客户给现金
  • 接待客户的住宿费账务处理
  • 应交税费未交增值税是什么意思
  • 关联方债权投资与权益投资比例
  • 出口已使用过的设备退税吗
  • 旅行社的综合服务费
  • 企业扶贫款怎么做账
  • 没有认缴到位的股票
  • 多转出的进项税怎么做账
  • 电脑找不到休眠设置了
  • 出口退税新政策对出口贸易的影响
  • 间接费用是什么费用
  • php日期时间运算汇总
  • win7如何调出浏览器
  • linux系统中查看进程的命令
  • ixapplet.exe - ixapplet是什么进程 有何作用
  • 企业备用金预借多久到账
  • lvgl使用
  • 哈勃太空望远镜取得的部分成果有哪些
  • 资产负债表中的货币资金怎么算
  • 七月份收入
  • 差旅费住宿费专票抵扣联贴在哪里
  • pytorch sgd优化器
  • 技术部周报怎么写
  • 自动驾驶数据集 mev
  • 不接受商业承兑会怎么样
  • 资产减值损失为什么要调增
  • 财务管理中的折现率是指什么
  • 企业自建房出售给员工个人后还需要缴纳土地使用税么
  • python搜索函数
  • python中myqr的用法
  • 农产品增值税免税备案资料
  • 土地增值税清算全流程实战案例
  • 公司刚成立没有员工需要申报个税吗
  • 服务业 费用可以暂估吗?
  • 会计凭证销毁年限
  • 收到银行手续费发票怎么入账
  • 长期股权投资的成本法和权益法区别
  • 差旅费抵扣政策内容
  • 金蝶主要业务及软件产品
  • 兼职人员属于雇佣人吗
  • 安全生产费用提取标准 最新
  • 五险一金是否需缴纳
  • ゆうちょ银行转账步骤
  • 特许权使用费税前扣除
  • 企业建账的流程有哪些
  • 房地产开发企业增值税税率
  • win8.1怎么打开设置
  • win7免费升级永久win8
  • 微软平板
  • express model
  • nodejs入门教程
  • 雷爵电动车官网
  • unity脚本调用
  • js确认框选择取消时退出程序怎么设置
  • 电子税务局网页版登录入口官网
  • 扣税13个点实际支付金额该怎么算
  • 为何会税控盘时钟异常
  • 河南省地方税务局公告2011年第10号
  • 地税的发票是什么样
  • 某地区土拍的楼盘有哪些
  • 深化财税体制改革完善税收制度心得体会
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设