Home > Article > Backend Development > ThinkPHP implements cross-module calling
This article mainly introduces the implementation of cross-module calling in ThinkPHP, which has certain reference value. Now I share it with everyone. Friends in need can refer to it
Use $this to call methods in the current module , but in many cases methods of other modules are often called in the current module. This article mainly introduces ThinkPHP cross-module calling operations. Friends who need it can refer to
Using $this can 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 use Index The above showName operation is called in the index operation of the module.
Cross-module call operation through A method
A method is used to instantiate other modules (equivalent to the new keyword). After the module is instantiated, it can be called within the module as an object. operation.
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('c7429c80a8d88aca733c20e581eb155a72947efbc698deed31dd6045c018f72bModule 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 through the R method
ThinkPHP also provides an R method that can directly call the operation methods of other modules. Change the above example of using the A method to the 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('< ;Project name://>72947efbc698deed31dd6045c018f72bModule 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 5 such a parameter. The corresponding showName operation may be:
<?php class UserAction extends Action{ public function showName($id){ // 根据 id 参数获取用户信息的代码 } } ?>To pass in multiple parameters, then define multiple elements in the array() parameter array of the R method in sequence, that is Can.
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.
ThinkPHP implementation of updated data example detailed explanation (demo)
The above is the detailed content of ThinkPHP implements cross-module calling. For more information, please follow other related articles on the PHP Chinese website!