Home >Backend Development >PHP Tutorial >Overview of ThinkPHP implementation of cross-module calling operations_PHP tutorial
Use $this to call methods in the current module, but in many cases methods of other modules are often called in the current module. ThinkPHP has built-in two special capital letter methods, A method and R method, to deal with cross-module calling issues.
Currently there is an index operation in the Index module. The User module has a showName operation. The specific codes for the User module and showName operation are as follows:
<?php class UserAction extends Action{ public function showName(){ echo "Hello World"; } } ?>
We will call the showName operation above in the index operation of the Index module.
Call operations across modules via A method
A method is used to instantiate other modules (equivalent to the new keyword). After the module is instantiated, the operations within the module can be called in the form of objects.
Call the showName operation example of the User module in the index operation of the Index module:
<?php class IndexAction extends Action{ public function index(){ header("Content-Type:text/html; charset=utf-8"); // 实例化 User 模块 $User = A('User'); // 调用 User 模块中的方法 $User->showName(); } } ?>
A method also supports cross-group calling and cross-project calling modules. The syntax is as follows:
A('5cf1df9f8bdd3e8d1e61cf510a273e37381382ddf38e7315549a3e95a7676ab0module name')
// 常用例子如下 A('User') //调用当前项目的 User 模块,如上面的例子 A('Admin://User') //调用 Admin 项目的 User 模块 A('Admin/User') //调用 Admin 分组的 User 模块 A('Admin://Tool/User') //调用 Admin 项目 Tool 分组的 User 模块
Call operations across modules via R methods
ThinkPHP also provides R methods, which can directly call the operation methods of other modules. Change the above example of using A method to R method:
<?php class IndexAction extends Action{ public function index(){ header("Content-Type:text/html; charset=utf-8"); // 调用 User 模块中的方法 R('User/showName'); } } ?>
The R method also supports cross-group calling and cross-project calling methods. The syntax is as follows:
R('5cf1df9f8bdd3e8d1e61cf510a273e37381382ddf38e7315549a3e95a7676ab0module name/operation'b5c1bd912a348ab1b5010fa8ab940bbc)
// 常用例子如下 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) );
This example indicates that the showName operation will accept a parameter of 5. The corresponding showName operation may be:
<?php class UserAction extends Action{ public function showName($id){ // 根据 id 参数获取用户信息的代码 } } ?>
To pass in multiple parameters, just define multiple elements in the array() parameter array of the R method in sequence.
A method or R method?
As can be seen from the above example, both the A method and the R method can call the operations of other modules. Is it better to use the A method or the R method? The suggestions here are as follows: If you want to use multiple methods in other modules, it is recommended to use method A to call different methods of the module through objects to avoid instantiating the object multiple times; If You only need to use one of the methods in other modules, so the R method is undoubtedly the most concise .