2-6关于作业的思考及疑问

来源:2-6 【实战】在框架中新增自定义类

李蓝猫LSJ

2019-04-09

作业布置为 在thinkphp/library 下新建ali文件夹 要求自动加载该文件夹下所有的类文件

解决方式为对命名空间进行注册

// 注册命名空间定义
self::addNamespace([
'think'  => __DIR__,
'traits' => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'traits',
'ali' => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'ali',
]);

但是在思考的时候有尝试像根目录下singwa文件夹一样引入

self::addAutoLoadDir(dirname(__DIR__) . DIRECTORY_SEPARATOR . thinkphp . DIRECTORY_SEPARATOR . 
library . DIRECTORY_SEPARATOR . 'ali');

但是似乎是行不通的

有些疑惑为何在thinkphp目录下要进行注册命名空间定义,而自动加载目录方式却很不管用,深思原因中,望老师解答。(。﹏。*)

写回答

2回答

爱因诗贤

2019-04-09

你好!同学! 你仔细看一下self::addNamespace  和 self::addAutoLoadDir  这两个 方法 最后都是 把 类的命名空间 和 对应 的绝对路径 放进 self::$fallbackDirsPsr4[] 这个数据 , 都是为了后面 自动加载不存在的类的时候触发 autoload函数,这个函数其中有一步会在  self::$fallbackDirsPsr4[]   去寻找命名空间对应的物理路径

1
5
singwa
回复
爱因诗贤
赞这位同学耐心的回复
2019-04-09
共5条回复

爱因诗贤

2019-04-09

你好,同学! self::addAutoLoadDir(dirname(__DIR__) . DIRECTORY_SEPARATOR . 'ali'); 这个是加载和 extend同级的目录,比如你要使用该 办法加载就应该这样写 self::addAutoLoadDir(dirname(__DIR__) . DIRECTORY_SEPARATOR .
.'thinkphp'.DIRECTORY_SEPARATOR
.‘library‘.DIRECTORY_SEPARATOR
’.'ali');   其中 DIRECTORY_SEPARATOR 相当于  "\"

0
0

BAT资深工程师解析Tp5+Tp6底层源码

一门课掌握主流Tp5+最新Tp6框架底层,拥抱新潮流

682 学习 · 145 问题

查看课程