iamaguest
2016-11-19 17:15
spl_autoload_register('\\Imooc\\Loader::Autoload'),这里的Imooc前面的为什么还有\\,命名空间不是Imooc吗,为什么还要加\\?
spl_autoload_register(string mathod)
里面是''单引号,这里没有什么转义的意思吧? 如果是双引号"",应该这样写的spl_autoload_register("\\Imooc\\Loader::Autoload")。
但,老师写的是 单引号,spl_autoload_register('\\Imooc\\Loader::Autoload')
所以,不明白,纠结了一天了,求大神。。。。
就是转义,不用想太多,一般用到反斜杠都要转义的
命名空间+\是为了全局引用,\\是是为 了转义\,如果没有第一个\,那么第二个\很有可能把命名空间的字母转义了,比如\test,\next这些中的t/n转义了\t,\n
spl_autoload_register('\Imooc\Loader::autoload');
这样写也是可以的,为什么加两个\\ 估计是资深程序员潜意识的防止转义做的操作吧
因为loader.php采用了命名空间,想要调用autoload这个方法必须要使用 \命名空间\类名::静态方法名的方法.
spl_autoload_register自动载入方法 需要传入载入文件的方法名才能调用.
请问下我也纠结于这个问题,希望能得到大神解释
首先,感谢你的回答!
但是,我觉得这个答案很不靠谱。
spl_autoload_register('IMooc\Loader::autoload'); 可以运行,是限定命名空间
但,上面说的什么转义,因为在单引号里面,这个根本用不着转义
spl_autoload_register('IMooc\Loader::autoload'); //用不着转义的 限定
spl_autoload_register('\IMooc\Loader::autoload');//用不着转义的完全限定
spl_autoload_register("IMooc\Loader::autoload");//转义的限定
spl_autoload_register("\\IMooc\\Loader::autoload");//转义的完全限定
不知道我这样理解是否正确
感谢你的回复!
谢谢!
Miracle这个说法比较靠谱,因为在PHP的引号中“\”这个是转义字符,但是这里使用的时候有点表示命名空间使用的意思,所以需要转义符号转义‘\’,就形成了“\\”这种形式。
当然,你不转义也能正常使用,比如这里我们改成
spl_autoload_register('IMooc\Loader::autoload');
一样正常使用,但是相对来说就不那么规范了,毕竟我们这节学习的目的的是PSR-0规范,所以向标准靠齐吧。
个人见解,不对之处请指正。
大话PHP设计模式
62257 学习 · 238 问题
相似问题