PHP (5.3+) 中的 \(反斜杠)有啥作用?
Posted
技术标签:
【中文标题】PHP (5.3+) 中的 \\(反斜杠)有啥作用?【英文标题】:What does a \ (backslash) do in PHP (5.3+)?PHP (5.3+) 中的 \(反斜杠)有什么作用? 【发布时间】:2011-06-14 23:18:30 【问题描述】:\
在 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 非常好的 *** 主题。感谢您的链接:) 我想这个问题应该关闭,但我不能自己关闭主题.. 这是一个重复的问题,但不是一个坏问题。但是您可以在标题中添加“反斜杠”,这样可以更轻松地在 Google 上搜索其他人。 重要的是要意识到,他们不再向信使开枪了。当你发现它是什么时,不要责怪我们 :) 哦不,我太迟了。 如果这是重复的,请链接重复的项目。 【参考方案1】:\
(反斜杠)是 PHP 5.3 中的命名空间分隔符。
函数开头之前的\
代表Global Namespace。
放在那里可以确保调用的函数来自全局命名空间,即使当前命名空间中有同名的函数。
【讨论】:
如果我的服务器出现错误,删除它是否安全? PhpUnit 喜欢用它:) \var_export() if (\defined('PHPUNIT_COMPOSER_INSTALL')) ; 但是为什么FALSE
前面有反斜杠呢?【参考方案2】:
命名空间
在 PHP 5.3+ 中,反斜杠 \
符号用于命名空间。它是指示命名空间的开始符号,也用作子命名空间名称之间的分隔符。
查看官方文档 namespacing。
Opcache
此外,在 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】:澄清潜在的混淆:
反斜杠不暗示类继承。
在下面,Animal
、Dog
、Shepherd
不必是类,而只是 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。
【讨论】:
以上是关于PHP (5.3+) 中的 \(反斜杠)有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
从 php mysql 中的 csv 文件的标题中删除反斜杠“\”