data-id="1190000004892254">
命名空間
命名空間的聲明
命名空間在PHP檔案的頂部,
命名空間在PHP檔案的頂部,廠商命名空間即下面聲明的“Oreilly”是最重要的命名空間;必須具有全局唯一性。 -
1 2 | <code><?php
namespace Oreilly;</code>
|
登入後複製
子命名空間
1 2 | <code><?php
namespace Oreilly\ModernPHP;</code>
|
登入後複製
Ps: 同一個命名空間下的所有類別、介面、函數沒必要在同一個PHP檔案中聲明;
所以,我們可以在不同的檔案中編寫屬於同一個命名空間的多個類別。
import and alias
PHP引入namespace之前,開發者們使用Zend式的類別名稱來解決命名衝突問題;
1 | <code># Zend_Cloud_DocumentService_Adapter_WindowsAzure_Query => Zend/Cloud/DocumentService/Adapter/WindowsAzure/Query.php</code>
|
登入後複製
但是你也看到了,太TM長了,不能忍啊! ! !
namespace提供了 import和 alias來解決這個問題。
import,alias 在5.3版本下支援類,介面與命名空間導入。 5.6開始支援函數與常數導入。
1 2 3 4 5 | <code># namespace without alias
<?php
$response = new \Symfony\Component\HttpFoundation\Response( 'Oops' ,400);
$response ->send();
$response2 = new \Symfony\Component\HttpFoundation\Response( 'Success' ,200);</code>
|
登入後複製
1 2 3 4 | <code># namespace with Default alias
use Symfony\Component\HttpFoundation\Response;
$response = new Response( 'Oops' ,400);
$response ->send();</code>
|
登入後複製
1 2 3 4 | <code># namespace with custom alias
use Symfony\Component\HttpFoundation\Response as Res;
$response = new Res( 'Oops' ,400);
$response ->send();</code>
|
登入後複製
注意:
同namespace聲明一樣,在PHP文件頂部使用use關鍵字,而且在
開頭無需加符號,因為PHP導入是完全限定;
use必須出現在全域作用域中,因為use在編譯時使用。
PHP5.6以後可以導入函數與常數;
1 2 3 4 | <code><?php
use func Namespace\functionName;
functionName();</code>
|
登入後複製
導入常數:
1 2 3 4 5 | <code><?php
use constant Namespace\CONST_NAME;
echo CONST_NAME;
</code>
|
登入後複製
實用技巧
多重導入常量:
1 2 3 4 | <code><?php
use Symfony\Component\HttpFoundation\Request,
Symfony\Component\HttpFoundation\Response,
Symfony\Component\HttpFoundation\Cookie;</code>
|
登入後複製
實用技巧
多重導入常量使用多個use語句;
不建議:
1 2 3 4 | <code><?php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Cookie;</code>
|
登入後複製
建議:
1 2 3 4 5 6 7 8 | <code><?php
namespace Foo {
}
namespace Bar {
}</code>
|
登入後複製
PHP允許一個檔案定義多個命名空間【強烈不建議】
1 2 3 4 5 6 7 8 9 10 | <code><?php
namespace My\App;
class Foo
{
public function doSomething()
{
$ex = new \Exception();
}
}</code>
|
登入後複製
全域命名空間
rrreee
NOTE: 此時,在Exception 此時,在此時類別的名稱前加前綴是告訴PHP在全域中尋找Exception,預設會在目前命名空間中尋找;
以上就介紹了Modern-php 書摘(一)namespace,包含了espace,modern的內容,希望對PHP教學有興趣的朋友有幫助。