php.net
(PHP 5 >= 5.3.0, PHP 7)
參見php自動加載,會對命名空間有更好的認識php
雖然任意合法的PHP代碼均可以包含在命名空間中,但只有如下類型的代碼受命名空間的影響,它們是:類(包括抽象類和traits)、接口、函數和常量。
若是一個文件中包含命名空間,它必須在其它全部代碼以前聲明命名空間,除了一個之外:declare關鍵字。全部非 PHP 代碼包括空白符都不能出如今命名空間的聲明以前。html
<html> <?php namespace MyProject; // 致命錯誤 - 命名空間必須是程序腳本的第一條語句 ?>
同一個命名空間能夠定義在多個文件中,即容許將同一個命名空間的內容分割存放在不一樣的文件中。編程
<?php namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
注:在實際的編程實踐中,很是不提倡在同一個文件中定義多個命名空間!函數
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } ?>
類名的三種引用方式:spa
tips:.net
$a = '\namespacename\classname'; $obj = new $a; $a = 'namespacename\classname'; $obj = new $a; $b = 'namespacename\funcname'; $b(); // prints namespacename\funcname $b = '\namespacename\funcname'; $b(); // also prints namespacename\funcname
常量__NAMESPACE__
的值是包含當前命名空間名稱的字符串。在全局的,不包括在任何命名空間中的代碼,它包含一個空的字符串。code
<?php namespace foo; use My\Full\Classname as Another; // 下面的例子與 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 導入一個全局類 use ArrayObject; // importing a function (PHP 5.6+) use function My\Full\functionName; // aliasing a function (PHP 5.6+) use function My\Full\functionName as func; // importing a constant (PHP 5.6+) use const My\Full\CONSTANT; $obj = new namespace\Another; // 實例化 foo\Another 對象 $obj = new Another; // 實例化 My\Full\Classname 對象 NSname\subns\func(); // 調用函數 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 實例化 ArrayObject 對象 // 若是不使用 "use \ArrayObject" ,則實例化一個 foo\ArrayObject 對象 func(); // calls function My\Full\functionName echo CONSTANT; // echoes the value of My\Full\CONSTANT ?>
類名稱老是解析到當前命名空間中的名稱。所以在訪問系統內部或不包含在命名空間中的類名稱時,必須使用徹底限定名稱。htm