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

ドキュメントのこれら 2 つのコード例のすぐ上に、重要な見出しがあります。

名前空間を使用しない場合、これを気にする必要がありますか?

いいえ。名前空間は、既存のコードや、名前空間を含まないまだ作成されていないコードにはまったく影響しません。必要に応じて、次のコードを記述できます。

したがって、ここでの意味は、名前空間new stdClass; に記述して同等にすることができるということではなく、名前空間をまったく使用していない場合は、バックスラッシュについて心配する必要がないということです。new \stdClass;

名前空間で作業する場合、ルールは適用され、使用する必要がありますnew \stdClass;

これは、ジェネリックだけ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 に答える