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)
Without any namespace definition, all class and function definitions are
placed into the global space - as it was in PHP before namespaces were
supported. Prefixing a name with \
will specify that
the name is required from the global space even in the context of the
namespace.
Example #1 Using global space specification
<?php
namespace A\B\C;
/* This function is A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // call global 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.