在MacOS系统下找不到动态命名空间,在windows系统下却运行没问题?
题目描述
代码在windows系统下运行没有问题,但是移植到MacOS系统下,找不到命名空间的类
相关代码
private static function initAutoLoad(){
spl_autoload_register(function($class_name){
$namespace= dirname($class_name); //命名空间
$class_name= basename($class_name); //类名
if(in_array($namespace, array('Core','Lib'))) //命名空间在Core和Lib下
$path= FRAMEWORK_PATH.$namespace.DS.$class_name.'.class.php';
elseif($namespace=='Model') //文件在Model下
$path=MODEL_PATH.$class_name.'.class.php';
elseif($namespace=='Traits') //文件在Traits下
$path=TRAITS_PATH.$class_name.'.class.php';
else //控制器
$path=CONTROLLER_PATH.PLATFROM_NAME.DS.$class_name.'.class.php';
if(file_exists($path) && is_file($path))
require $path;
});
}
//请求分发
private static function initDispatch(){
$controller_name='\\Controller\\'.PLATFROM_NAME.'\\'.CONTROLLER_NAME.'Controller';
//拼接控制器类名
$action_name=ACTION_NAME.'Action'; //拼接方法名
$obj=new $controller_name;
$obj->$action_name();
}
你期待的结果是什么?实际看到的错误信息又是什么?
在windows系统下面,并没有任何报错,可以显示页面。但是在MacOS系统下,一运行就会出错
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
windows 和mac os、linux的目录分隔符不一样,widnows是\和/都可以,而mac只能是/,所以你用命名空间里的\来当目录分隔符是不行的。
老哥,你不是已经问过了吗
https://segmentfault.com/q/10...
将:$class_name= basename($class_name);
改成:$class_name = basename(str_replace('\\','/',$class_name));
如果存在\就替换成/轻松解决这个问题