【问题标题】:What does a \ (backslash) do in PHP (5.3+)?\\(反斜杠)在 PHP(5.3+)中有什么作用?
【发布时间】:2018-07-19 19:40:19
【问题描述】:

\\ 在 PHP 中的作用是什么?

例如,CSRF4PHP 具有 \\FALSE\\session_id\\Exception

public function __construct($timeout=300, $acceptGet=\\FALSE){
    $this->timeout = $timeout;
    if (\\session_id()) {
        $this->acceptGet = (bool) $acceptGet;
    } else {
        throw new \\Exception(\'Could not find session id\', 1);
    }
}
  • @mario 非常好的 stackoverflow 主题。感谢您的链接:)
  • 我想这个问题应该关闭,但我自己无法关闭主题..
  • 这是一个重复的问题,但不是一个坏问题。但是您可以在标题中添加“反斜杠”,这样可以更轻松地搜索其他人。
  • 重要的是要意识到,他们不再向信使开枪了。当你发现它是什么时,不要责怪我们:) 哦不,我太晚了。
  • 如果这是重复的,请链接重复的项目。

标签: php namespaces opcode opcache


【解决方案1】:

\(反斜杠)是 PHP 5.3 中的命名空间分隔符。

函数开头之前的\ 代表Global Namespace

将它放在那里将确保调用的函数来自全局命名空间,即使当前命名空间中有同名的函数。

【讨论】:

  • 如果我的服务器导致错误,删除它是否安全?
  • PhpUnit 喜欢使用它 :) \var_export() if (\defined('PHPUNIT_COMPOSER_INSTALL')) {;}
  • 但是为什么FALSE前面有反斜杠呢?
【解决方案2】:

命名空间

在 PHP 5.3+ 中,反斜杠 \ 符号用于命名空间。它是指示命名空间的开始符号,也用作子命名空间名称之间的分隔符。

请参阅有关的官方文档namespacing.

操作缓存

此外,在 PHP 7.0+ 中,一些函数是替换为操作码经过OPCache,这使得这些特定功能运行得更快。但是,这仅在将函数放置在根命名空间中时才有效。看到这个discussion关于这个话题。所以除了命名空间之外,\ 也会间接影响代码优化。

以下本机函数受益于此效果:

"array_slice"
"assert"
"boolval"
"call_user_func"
"call_user_func_array"
"chr"
"count"
"defined"
"doubleval"
"floatval"
"func_get_args"
"func_num_args"
"get_called_class"
"get_class"
"gettype"
"in_array"
"intval"
"is_array"
"is_bool"
"is_double"
"is_float"
"is_int"
"is_integer"
"is_long"
"is_null"
"is_object"
"is_real"
"is_resource"
"is_string"
"ord"
"strlen"
"strval"

【讨论】:

  • 如果它导致代码运行得更快,想知道他们为什么不默认应用它?谁不喜欢表演?
  • 可能是因为很长时间没有默认配置 OPCache,甚至直到版本 7 才包含该功能。它还需要知识来设置和configure
【解决方案3】:

为了澄清潜在的混淆:

反斜杠才不是意味着类继承.

在下文中,AnimalDogShepherd 不必是类,而只是 namespaces。意思是用于将名称组合到avoid naming collisions 的东西。

$myDog = new \Animal\Dog\Shepherd\GermanShepherd();

前导 \ 表示 Animal 在全局范围内声明。

【讨论】:

    【解决方案4】:

    \ 在 PHP 5.3 中用于命名空间。有关命名空间和 PHP 的更多信息,请参阅 http://www.php.net/manual/en/language.namespaces.rationale.php

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多