问答详情
源自:3-3 开发一个PSR-0 的基础框架

spl_autoload_register('\\Imooc\\Loader::Autoload')为什么是 \\

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')

所以,不明白,纠结了一天了,求大神。。。。


提问者:iamaguest 2016-11-19 17:15

个回答

  • 慕粉1217053508
    2018-12-25 15:21:03

    就是转义,不用想太多,一般用到反斜杠都要转义的

  • fulcrum_逸凡
    2017-10-02 12:09:16

    命名空间+\是为了全局引用,\\是是为 了转义\,如果没有第一个\,那么第二个\很有可能把命名空间的字母转义了,比如\test,\next这些中的t/n转义了\t,\n

  • OrdMeng
    2017-06-01 09:46:28

    spl_autoload_register('\Imooc\Loader::autoload');
    这样写也是可以的,为什么加两个\\ 估计是资深程序员潜意识的防止转义做的操作吧

  • OrdMeng
    2017-06-01 09:41:10

    1. 因为loader.php采用了命名空间,想要调用autoload这个方法必须要使用   \命名空间\类名::静态方法名的方法.

    2. spl_autoload_register自动载入方法 需要传入载入文件的方法名才能调用.

  • 悲剧丶不上演
    2016-12-25 21:45:17

    请问下我也纠结于这个问题,希望能得到大神解释

  • iamaguest
    2016-11-19 20:54:17

    首先,感谢你的回答!
    但是,我觉得这个答案很不靠谱。
    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");//转义的完全限定

    不知道我这样理解是否正确

    感谢你的回复!
    谢谢!

  • 齐凯
    2016-11-19 17:50:25

    Miracle这个说法比较靠谱,因为在PHP的引号中“\”这个是转义字符,但是这里使用的时候有点表示命名空间使用的意思,所以需要转义符号转义‘\’,就形成了“\\”这种形式。
    当然,你不转义也能正常使用,比如这里我们改成
      spl_autoload_register('IMooc\Loader::autoload');
    一样正常使用,但是相对来说就不那么规范了,毕竟我们这节学习的目的的是PSR-0规范,所以向标准靠齐吧。
    个人见解,不对之处请指正。