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回答
-
你好!同学! 你仔细看一下self::addNamespace 和 self::addAutoLoadDir 这两个 方法 最后都是 把 类的命名空间 和 对应 的绝对路径 放进 self::$fallbackDirsPsr4[] 这个数据 , 都是为了后面 自动加载不存在的类的时候触发 autoload函数,这个函数其中有一步会在 self::$fallbackDirsPsr4[] 去寻找命名空间对应的物理路径
152019-04-09 -
爱因诗贤
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 相当于 "\"00
相似问题