假设项目中有两个模块:“index(前台)”和“admin(后台)”。如下图:
并且上述这个两个模块下分别都有controller(控制器)代码如下:
admin\controller\Index.php
//声明命名空间
namespace app\admin\controller;
//声明控制器
class Index{
public function index(){
return "我是前台[admin]中的[index]控制器下的[index]方法。";
}
}
index\controller\User.php
//声明命名空间
namespace app\index\controller;
//声明控制器
class User{
//index 方法
public function index(){
return "我是前台[index]中的[User]控制器下的[index]方法。";
}
}
在控制器中调用:index\controller\Index.php
namespace app\index\controller;
use \app\index\controller\User;
use \app\admin\controller\Index as AdminIndex;
class Index
{
public function index()
{
return '默认内容';
}
public function test(){
return '我是用户自己创建的test方法';
}
public function diaoyong(){
//同一模块调用前台[index]模块下的[User]控制器下的[index]方法
$model = new \app\index\controller\User;
echo $model->index();
echo '
';
//同一模块使用 use
$model = new User;
echo $model->index();
echo '
';
//同一模块使用系统方法
$model = controller('User');
echo $model->index();
}
public function diaohoutai(){
//跨模块使用命名空间
$model = new \app\admin\controller\Index;
echo $model->index();
echo '
';
//跨模块使用 use
$model = new AdminIndex;
echo $model->index();
echo '
';
//跨模块使用系统方法
$model = controller('admin/Index');
echo $model->index();
}
}
注意:
1、控制器名称的书写格式必须为驼峰式;
2、如果控制器下有两个相同的控制器,不能重名,要用“as”来去别名,例如上面第六行“as AdminIndex”;
3、命名空间目录前的“\”不能遗漏;
4、跨模块使用系统调用方法时,注意目录用正斜杠:“('admin/Index')”。