(PHP 5 >= 5.3.0, PHP 7, PHP 8)
在一個(gè)命名空間中,當 PHP 遇到一個(gè)非限定的類(lèi)、函數或常量名稱(chēng)時(shí),它使用不同的優(yōu)先策略來(lái)解析該名稱(chēng)。類(lèi)名稱(chēng)總是解析到當前命名空間中的名稱(chēng)。因此在訪(fǎng)問(wèn)系統內部或不包含在命名空間中的類(lèi)名稱(chēng)時(shí),必須使用完全限定名稱(chēng),例如:
示例 #1 在命名空間中訪(fǎng)問(wèn)全局類(lèi)
<?php
namespace A\B\C;
class Exception extends \Exception {}
$a = new Exception('hi'); // $a 是類(lèi) A\B\C\Exception 的一個(gè)對象
$b = new \Exception('hi'); // $b 是類(lèi) Exception 的一個(gè)對象
$c = new ArrayObject; // 致命錯誤, 找不到 A\B\C\ArrayObject 類(lèi)
?>
對于函數和常量來(lái)說(shuō),如果當前命名空間中不存在該函數或常量,PHP 會(huì )退而使用全局空間中的函數或常量。
示例 #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";
}
?>