gpt4 book ai didi

php - 使用 PHP namespace 时是单斜杠还是双斜杠?

转载 作者:可可西里 更新时间:2023-11-01 13:42:46 24 4
gpt4 key购买 nike

下面两行调用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');

我问的原因是:如果单斜线总是有效,为什么我在网上看到那么多双斜线,连 Composer 都生成这样的文件[1]?有没有我遗漏的情况?

[1] https://github.com/ircmaxell/quality-checker/blob/master/vendor/composer/autoload_namespaces.php

最佳答案

任何 literal 符号都可以像使用单个反斜杠一样工作,这就是定义语法的方式:

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

使用字符串时,string escaping rules申请:

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

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

在单引号字符串中,只需要转义一个字符:'。 IE。如果要在单引号中写单引号,需要用反斜杠转义:

echo 'don\'t';

这使得反斜杠成为一个特殊字符,您可能还需要将其转义:

echo 'backslash: \\';

因此,在单引号字符串中,\\ 始终是单个反斜杠。如果您使用单个反斜杠并且下一个字符不是 '\,那么该单个反斜杠也只是一个反斜杠:

echo 'just \ a \ backslash';

所以除了这两种情况,没有什么区别。

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

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

关于php - 使用 PHP namespace 时是单斜杠还是双斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25459197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com