请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

作业布置为 在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回答

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

1 回复 有任何疑惑可以回复我~
  • 提问者 李蓝猫LSJ #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-04-09 19:32:01
  • 爱因诗贤 回复 提问者 李蓝猫LSJ #2
    https://blog.csdn.net/qq_38937634/article/details/89063829  这个是我写的小结,画了一个图,同学可以看看,谢谢
    回复 有任何疑惑可以回复我~ 2019-04-09 19:39:38
  • 提问者 李蓝猫LSJ 回复 爱因诗贤 #3
    十分感谢,正在仔细阅读兄台的文章,受益匪浅!
    回复 有任何疑惑可以回复我~ 2019-04-09 19:44:15
爱因诗贤 2019-04-09 19:22:08

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信