Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP名称空间时使用单斜杠还是双斜杠?_Php - Fatal编程技术网

使用PHP名称空间时使用单斜杠还是双斜杠?

使用PHP名称空间时使用单斜杠还是双斜杠?,php,Php,下面两行调用name spaced方法都有效,是否存在单斜杠不起作用的情况 <?php namespace Foo\Bar; class Dummy { public static function hello() { echo 'world'; } } echo \Foo\Bar\Dummy::hello(); call_user_func('\Foo\Bar\Dummy::hello'); call_user_func('\\Foo\\Bar\\

下面两行调用name spaced方法都有效,是否存在单斜杠不起作用的情况

<?php

namespace Foo\Bar;

class Dummy {
    public static function hello() {
        echo 'world';
    }
}

echo \Foo\Bar\Dummy::hello();

call_user_func('\Foo\Bar\Dummy::hello');
call_user_func('\\Foo\\Bar\\Dummy::hello'); 

在PHP中,使用单引号[“”]时不需要转义特殊字符。大多数编程语言在使用双引号[“”]时检查\t(制表符)、\n(新行)、\r(回车符)和其他内容。当您在PHP中使用双引号时,它会搜索这些字符,因此您必须转义特殊的反斜杠字符,以便PHP知道您没有转义反斜杠后面的字符。单引号的情况并非如此

您可以自己进行测试:

echo "this\tis\ta\ttest";
echo 'this\tis\ta\ttest';

在单引号字符串中,您只需要使用反斜杠来转义单引号,或者如果反斜杠作为最后一个字符出现,则只需使用反斜杠,例如
'foo\\\'

在您的示例中,突出显示了这种情况:

顺便说一句,这也是
var\u export()
的输出:

因此,尽管从技术上讲,在上面的示例中没有必要跳过其他反斜杠,
var\u export()
仍将执行此操作

另请参见:和

任何文字符号的工作原理与单个反斜杠相同,这就是语法的定义方式:

namespace Foo\Bar;
echo \Foo\Bar\Dummy::hello();
使用字符串时,应用:

(顺便说一句,在这些情况下,不要以反斜杠开头,字符串中的完全限定类名始终是绝对的,解析相对命名空间引用时不需要起始反斜杠。)

在单引号字符串中,只需转义单个字符:
。也就是说,如果你想在单引号中写单引号,你需要用反斜杠转义:

echo 'don\'t';
echo 'just \ a \ backslash';
这使得反斜杠成为一个特殊字符,您可能还需要转义:

echo 'backslash: \\';
因此,在单引号字符串中,
\\
始终是一个反斜杠。如果使用的是单个反斜杠,而下一个字符不是
'
\
,则该单个反斜杠也只是单个反斜杠:

echo 'don\'t';
echo 'just \ a \ backslash';
因此,除了这两种情况,这没有区别

双引号字符串有更多的转义序列,如
\n
,您需要处理这些转义序列


顺便说一句,这就是为什么许多人对选择
\
作为名称空间分隔符感到非常不满意,因为它已经是一个具有特殊含义的字符,并且会导致混淆和可能的bug

谢谢。当我看到composer正在生成像
'Symfony\\Component\\Yaml'=>$vendorDir'这样的自动加载php文件时,会感到困惑/symfony/yaml/…
是的,在这种情况下,不必严格地使用反斜杠,但它确实不会影响到。谢谢,我更新了我的问题,参考了composer generate autoload php文件,为什么他们在单引号字符串中使用“\\”?@Howard更新了我的答案,特别涉及到这个主题。
echo 'just \ a \ backslash';