ThinkPHP实现跨模块调用操作方法概述
使用$this可以调用当前模块内的方法,但是很多情况下经常会在当前模块中调用其他模块的方法。ThinkPHP内置了A方法与R方法这两个特殊的大写字母方法来处理跨模块调用的问题。
目前Index模块内有index操作User模块有showName操作User模块及showName操作具体代码如下:
<?php classUserActionextendsAction{ publicfunctionshowName(){ echo"HelloWorld"; } } ?>
我们将在Index模块的index操作中调用上面的showName操作。
通过A方法跨模块调用操作
A方法用于实例化其他模块(当于new关键字),模块被实例化之后,就可以以对象的方式调用模块内的操作。
在Index模块的index操作中调用User模块的showName操作实例:
<?php classIndexActionextendsAction{ publicfunctionindex(){ header("Content-Type:text/html;charset=utf-8"); //实例化User模块 $User=A('User'); //调用User模块中的方法 $User->showName(); } } ?>
A方法还支持跨分组调用和跨项目调用模块,语法如下:
A('<项目名://><分组名/>模块名')
//常用例子如下 A('User')//调用当前项目的User模块,如上面的例子 A('Admin://User')//调用Admin项目的User模块 A('Admin/User')//调用Admin分组的User模块 A('Admin://Tool/User')//调用Admin项目Tool分组的User模块
通过R方法跨模块调用操作
ThinkPHP还提供了R方法,可直接调用其他模块的操作方法,将上面使用A方法的例子更改为R方法:
<?php classIndexActionextendsAction{ publicfunctionindex(){ header("Content-Type:text/html;charset=utf-8"); //调用User模块中的方法 R('User/showName'); } } ?>
R方法同样也支持跨分组调用和跨项目调用方法,语法如下:
R('<项目名://><分组名/>模块名/操作'<,array()>)
//常用例子如下 R('User/showName')//调用当前项目的User模块的showName方法,如上面的例子 R('Admin://User/showName')//调用Admin项目User模块的showName方法 R('Admin/User/showName')//调用Admin分组User模块的showName方法 R('Admin://Tool/User/info')//调用Admin项目Tool分组的User模块的info方法 R方法接收参数 R方法也支持对调用的方法传入参数,因为实际上调动的操作,可能是需要传入参数的。 R方法的第二个参数为数组,该数组将作为被调用操作的参数传入。如下面的例子所示: R('User/showName',array(5));
该例子表示showName操作将接受5这样一个参数。而对应的showName操作可能为:
<?php classUserActionextendsAction{ publicfunctionshowName($id){ //根据id参数获取用户信息的代码 } } ?>
要传入多个参数,那么将R方法的array()参数数组依次定义多个元素即可。
A方法还是R方法?
从上面的例子可以看出,A方法和R方法都可以调用其他模块的操作,那是使用A方法好还是R方法好呢?在此建议如下:如果要使用其他模块内的多个方法,那么建议使用A方法,通过对象的方式调用该模块的不同方法,避免多次实例化对象;如果只需要使用其他模块内的其中一个方法,那么无疑R方法是最简洁的。
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。