[top-think/think]系统类库不支持驼峰命名法导入

2023-12-21 68 views
1

ThinkPHP 5.0 手册中, 命令空间章节中有这样一段话:

5.0默认的目录规范是小写,类文件命名是驼峰法,并且首字母大写。 原则上,可以支持驼峰法命名的目录,只要命名空间定义和目录一致即可, 例如:

$class = new \Think\Cache\Driver\File();

但在使用过程中, 不支持这种写法, 其中的Think 必须为小写开头, 即必须写为:

$class = new \think\Cache\Driver\File();

才可以正常使用

但是APP目录下的控制器等可以使用驼峰命名法调用, 即以下方式正常:

use App\Index\Controller;

回答

0

因为think命名空间是内置的 而App命名空间可以自定义的

5

但是有一种方法是可以实现的 单独注册一个namespace

Loader::addNamespace('Think',LIB_PATH . 'think' . DS);
3

我直接在 thinkphp\library\think\Loader.php 中的第63行之后如下代码, 暂未发现问题:

58.            // 命名空间自动加载
59.            if (!strpos($class, '\\')) {
60.                return false;
61.            }
62.            // 解析命名空间
63.            list($name, $class) = explode('\\', $class, 2);
64.            // 新增代码 
65.            $name = strtolower($name);
66.            if (isset(self::$namespace[$name])) {
67.                // 注册的命名空间
68.                $path = self::$namespace[$name];
69.            } elseif (is_dir(EXTEND_PATH . $name)) {
70.                // 扩展类库命名空间
71.                $path = EXTEND_PATH . $name . DS;
72.            } else {
73.                return false;
74.            }
2

这样 如果注册的命名空间是大写开头的还不能用了

7

@liu21st 为什么 不将所有的额这个变为小写或者还是沿用3.2的方式,说实在 转到5 对命名空间这里还是有些不适应,感觉3.2到5 如果能够沿用下3.2的命名规范也是不错的 毕竟 之前都是大写开头的 忽然变成根命名空间小写,下面的命名空间的还是大写,这种混合方式有点不习惯。

5

其实5的命名空间不限制大小写 完全跟目录走 根命名空间都是自己配置定义的