1

从 php 文档中,我们访问全局类,例如

<?php
namespace A\B\C;
class Exception extends \Exception {}
$a = new Exception('hi'); // $a is an object of class A\B\C\Exception
$b = new \Exception('hi'); // $b is an object of class Exception
$c = new ArrayObject; // fatal error, class A\B\C\ArrayObject not found
?> 

但是,当医生这么说时,我迷路了

<?php
$a = new \stdClass;
?>

在功能上等同于:

<?php
$a = new stdClass;
?>

这里http://php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.shouldicare

有人可以解释一下医生在这里说什么。

谢谢。

4

2 回答 2

3

文档中这两个代码示例的正上方是重要的标题:

如果我不使用命名空间,我应该关心这些吗?

不会。命名空间不会以任何方式影响任何现有代码,或任何尚未编写的不包含命名空间的代码。如果您愿意,可以编写此代码:

所以这里的含义不是你可以在命名空间new stdClass; 编写并让它等效,而是如果你根本不使用命名空间,那么你不必担心反斜杠new \stdClass;

在命名空间中工作时,该规则确实适用,您将需要使用new \stdClass;.

这不仅适用于 generic stdClass,还适用于任何类。

// Without namespaces:
$mysqli = new MySQLi(...);

// With namespaces
$mysqli = new \MySQLi(...);
于 2013-01-26T14:51:34.880 回答
2

该文档说这\stdClass在功能上仅相当于stdClass

尚未编写的不包含命名空间的代码

即,如果您使用命名空间 - 正如您的代码所示 - 您将让您在当前命名空间中定义类(使用new stdClass);或者您只需要使用不需要 ( new \stdClass) 的本地类。

于 2013-01-26T14:51:45.800 回答