在一個命名空間中,當 PHP 遇到一個非限定的類別、函數或常數名稱時,它會使用不同的優先策略來解析該名稱。類別名稱總是解析到目前命名空間中的名稱。因此在存取系統內部或不包含在命名空間中的類別名稱時,必須使用完全限定名稱,例如:
Example #1 在命名空間中存取全域類別
<?php namespace A\B\C; class Exception extends \Exception {} $a = new Exception('hi'); // $a 是类 A\B\C\Exception 的一个对象 $b = new \Exception('hi'); // $b 是类 Exception 的一个对象 $c = new ArrayObject; // 致命错误, 找不到 A\B\C\ArrayObject 类 ?>
對於函數和常數來說,如果目前命名空間中不存在該函數或常數,PHP 會退而使用全域空間中的函數或常數。
Example #2 命名空間中後備的全域函數/常數
<?php namespace A\B\C; const E_ERROR = 45; function strlen($str) { return \strlen($str) - 1; } echo E_ERROR, "\n"; // 输出 "45" echo INI_ALL, "\n"; // 输出 "7" - 使用全局常量 INI_ALL echo strlen('hi'), "\n"; // 输出 "1" if (is_array('hi')) { // 输出 "is not array" echo "is array\n"; } else { echo "is not array\n"; } ?>