Included files will default to the global namespace.
<?php
//test.php
namespace test {
include 'test1.inc';
echo '-',__NAMESPACE__,'-<br />';
}
?>
<?php
//test1.inc
echo '-',__NAMESPACE__,'-<br />';
?>
Results of test.php:
--
-test-
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Без определения пространства имён определения классов и функций
помещаются в глобальном пространстве — так же, как это было в PHP до введения
пространств имён. Добавление префикса \
к именам указывает, что
требуется имя из глобального пространства, даже в контексте пространства имён.
Пример #1 Спецификация глобального пространства
<?php
namespace A\B\C;
/* Функция — это A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // Вызов глобальной функции fopen
return $f;
}
?>
Included files will default to the global namespace.
<?php
//test.php
namespace test {
include 'test1.inc';
echo '-',__NAMESPACE__,'-<br />';
}
?>
<?php
//test1.inc
echo '-',__NAMESPACE__,'-<br />';
?>
Results of test.php:
--
-test-
Note that variables aren't part of the namespace so they are always global (or scoped to function, etc.) and can't be accessed the same way as other namespace stuff.So no: namespace Foo; $var = "hello"; echo \Foo\$var;
In namespaced context the Exception class needs to be prefixed with global prefix operator.<?phpnamespace hey\ho\lets\go;class MyClass{ public function failToCatch() { try { $thing = somethingThrowingAnException(); } catch (Exception $ex) { // Not catched } } public function succeedToCatch() { try { $thing = somethingThrowingAnException(); } catch (\Exception $ex) { // This is now catched } }}
To define an associative array (hash) so that it is part of the namespace, instead of going into the global namespace, just declare it as const, istead of as a variable.This is handy for lookup tables, config settings, etc.// Example. Instead of writing:$my_datatypes = [ "sterility" => [ "xlsx" => [ "Sample Type", "Run Pass/Fail", "Result" ], "db" => [ "SampleType", "RunPassFail", "Result" ] ]];// ...declare the lookup table like this:const MY_DATATYPES = [ "sterility" => [ "xlsx" => [ "Sample Type", "Run Pass/Fail", "Result" ], "db" => [ "SampleType", "RunPassFail", "Result" ] ]];// ...and it will be declared within the current namespace.