php MVC怎么实现自动加载不同命名空间的类? 10

我自己想尝试着写个简单的MVC框架,结果在自动加载时就卡住了,求高手指点下这是目录结构代码如下入口文件index.php<?phpdefine('BASEDIR',__D... 我自己想尝试着写个简单的MVC框架,结果在自动加载时就卡住了,求高手指点下
这是目录结构

代码如下
入口文件index.php
<?phpdefine('BASEDIR',__DIR__);require BASEDIR.'\\autoload.php';spl_autoload_register('controllers\\Loader::autoload');$c = strtolower($_GET['c']); //控制器名$a = strtolower($_GET['a']); //方法名$controller = 'controllers\\index\\'.$c.'Controller'; //就是这个地方我想直接new,而不需要在前面加命名空间,不知道该怎么实现//$controller = $c.'Controller';$obj = new $controller();$obj->$a();

控制器commonController.class.php:
<?php
namespace controllers\common;class commonController { /** * @param string $templets * @param array $var */ public function display($templets,$var){ define('BASEDIR',__DIR__); ob_clean(); ob_start(); extract($var); $templets = str_replace('/','\\',$templets); $tmp_file = BASEDIR.'\\views\\'.$templets.'.html'; include_once $tmp_file; echo ob_get_contents(); }}

控制器indexController.class.php:
<?php
namespace controllers\index;use controllers\common\commonController;class indexController extends commonController{ public function index(){ $this->display('index/index',['test'=>'success']); }}

自动加载类autoload.php:
<?php
namespace controllers;class Loader{ static function autoload($className){ $class = BASEDIR.'\\'.$className.'.class.php'; $class = str_replace('\\','/',$class); if(file_exists($class)){ include_once $class; } }}
我想在入口文件直接new载入的类,而不需要在前面添加命名空间,该怎么做,求大神指点下
展开
 我来答
___Hua
2015-11-27 · 超过11用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:21.2万
展开全部
我不是大神,我就是用几点不明白。。
不加命名空间,怎么区分重名的类
假如把路径写成常量,使用常量的话,假如是该目录下更深的目录,岂不是找不到了。。。
或者可以写一个路由文件,去一对一的查找参数对应的控制器完整命名空间,是不是也行
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式