搜索
系统检测到您的用户名不符合规范:

关于调用其它控制器里的操作的方法漫谈

浏览:1802 发布日期:2018年04月29日 分类:技术分享 关键字: 跨模块 继承 基础知识
起因
刚用tp5做一个项目,需要跨模块使用另一个模块里的控制器的操作,一时没有反应过来,于是到本论坛搜一搜方法,结果翻了翻手册,发现了一个action助手函数,于是便用了。
经过
我是这么用的:$name=action("模块/控制器/操作");当我满怀希望地一运行时,结果报了个错:Trying to invoke protected method app\member\controller\Account::xxx() from scope ReflectionMethod我一看,愣了。
发展
居然错了,原来是我另一个模块里的操作前加了protected,是一个被保护的操作,事情到了这个地步。我只有两个选择,要么将其修改为public方法,但是不行,不安全,要么找另一个方法。
高潮
我在仔细地看着这个操作,猛然间才明白过来,其实不管是现在的tp5,还是之前的tp3,或者未来的tp6、7、8、9等等,要知道,所有的模块具体到实际就是一个个控制器,而控制器实际上就是一个类,既然是一个类,那么必然可以被继承或被实例化。而调用控制器里的一个方法,实际上则是调用某个类的一个函数。在类中函数有三种,一是public,二是protected,三是private。所以,调用另一个控制器里的方法,要么继承控制器通过$this->xxx()来调用,要么实例化控制器使用A=new A;$a=A->xxx()来调用。
我选择了实例化,结果,终于还是不行。因为protected方法只能在父类,本类以及子类中调用。所以,最后我选择了继承它,即使用class Create extends Account,Create 是当前控制器,Account是目标控制器,任务成功完成。结局事情到此,就算结束了。但是我总结出一个经验,不管是使用什么框架,内部如何称呼,组织不要被其表面所蒙蔽,要明白它的本质,不过是以一个类,数组,组成的,而它们,是php语言。那么,所有一切能通过框架完成的,php都能完成。框架只是将这个过程简单化了,组织得更有效率。所以,多学学基础知识是有好处得。正所谓:
万丈高楼平地起
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
lgv55555
积分:415 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /