PHP PHP
data-id="1190000004892254">
命名空間
命名空間的聲明
命名空間在PHP檔案的頂部,
<code><?php namespace Oreilly;</code>
<code><?php namespace Oreilly\ModernPHP;</code>
Ps: 同一個命名空間下的所有類別、介面、函數沒必要在同一個PHP檔案中聲明;
所以,我們可以在不同的檔案中編寫屬於同一個命名空間的多個類別。
import and alias
PHP引入namespace之前,開發者們使用Zend式的類別名稱來解決命名衝突問題;
<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開始支援函數與常數導入。
<code># namespace without alias <?php $response = new \Symfony\Component\HttpFoundation\Response('Oops',400); $response->send(); $response2 = new \Symfony\Component\HttpFoundation\Response('Success',200);</code>
<code># namespace with Default alias use Symfony\Component\HttpFoundation\Response; $response = new Response('Oops',400); $response->send();</code>
<code># namespace with custom alias use Symfony\Component\HttpFoundation\Response as Res; $response = new Res('Oops',400); $response->send();</code>
<code><?php use func Namespace\functionName; functionName();</code>
導入常數:
<code><?php use constant Namespace\CONST_NAME; echo CONST_NAME; </code>
實用技巧
多重導入常量:
<code><?php use Symfony\Component\HttpFoundation\Request, Symfony\Component\HttpFoundation\Response, Symfony\Component\HttpFoundation\Cookie;</code>
實用技巧
多重導入常量使用多個use語句;
不建議:
<code><?php use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Cookie;</code>
建議:
<code><?php namespace Foo { //... } namespace Bar { //... }</code>
PHP允許一個檔案定義多個命名空間【強烈不建議】
<code><?php namespace My\App; class Foo { public function doSomething() { $ex = new \Exception(); } }</code>
全域命名空間
rrreeeNOTE: 此時,在Exception 此時,在此時類別的名稱前加前綴是告訴PHP在全域中尋找Exception,預設會在目前命名空間中尋找;
以上就介紹了Modern-php 書摘(一)namespace,包含了espace,modern的內容,希望對PHP教學有興趣的朋友有幫助。