在MacOS系统下找不到动态命名空间,在windows系统下却运行没问题?

发布于 2022-09-12 23:23:56 字数 1354 浏览 29 评论 0

题目描述

代码在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

↙厌世 2022-09-19 23:23:56

windows 和mac os、linux的目录分隔符不一样,widnows是\和/都可以,而mac只能是/,所以你用命名空间里的\来当目录分隔符是不行的。
老哥,你不是已经问过了吗
https://segmentfault.com/q/10...

月棠 2022-09-19 23:23:56

将:$class_name= basename($class_name);
改成:$class_name = basename(str_replace('\\','/',$class_name));
如果存在\就替换成/轻松解决这个问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文