命名空間在PHP文件的頂部,<?php 標籤後的第一行聲明;php
命名空間聲明語句以namespace開頭,隨後是一個空格,而後是命名空間的名稱,最後以;結尾;函數
廠商命名空間即下面聲明的「Oreilly」是最重要的命名空間;必須具備全局惟一性。spa
<?php namespace Oreilly;
子命名空間code
<?php namespace Oreilly\ModernPHP;
Ps: 同一個命名空間下的全部類、接口、函數不必在同一個PHP文件中聲明;
因此,咱們能夠在不一樣的文件中編寫屬於同一個命名空間的多個類。接口
PHP引入namespace以前,開發者們使用Zend式的類名來解決命名衝突問題;作用域
# Zend_Cloud_DocumentService_Adapter_WindowsAzure_Query => Zend/Cloud/DocumentService/Adapter/WindowsAzure/Query.php
可是你也看到了,太TM長了,不能忍啊!!!
namespace提供了 import和 alias來解決這個問題。
import,alias 在5.3版本下支持類,接口與命名空間導入。5.6開始支持函數與常量導入。開發
# namespace without alias <?php $response = new \Symfony\Component\HttpFoundation\Response('Oops',400); $response->send(); $response2 = new \Symfony\Component\HttpFoundation\Response('Success',200);
# namespace with Default alias use Symfony\Component\HttpFoundation\Response; $response = new Response('Oops',400); $response->send();
# namespace with custom alias use Symfony\Component\HttpFoundation\Response as Res; $response = new Res('Oops',400); $response->send();
注意:it
同namespace聲明同樣,在PHP文件頂部使用use關鍵字,並且在<?php 標籤或者聲明命名空間以後;io
開頭無需加\符號,由於PHP導入是徹底限定;編譯
use必須出如今全局做用域中,由於use在編譯時使用。
PHP5.6之後能夠導入函數和常量;
<?php use func Namespace\functionName; functionName();
導入常量:
<?php use constant Namespace\CONST_NAME; echo CONST_NAME;
若是想在一個PHP文件中導入多個類、接口、函數或者常量,須要使用多個use語句;
不建議:
<?php use Symfony\Component\HttpFoundation\Request, Symfony\Component\HttpFoundation\Response, Symfony\Component\HttpFoundation\Cookie;
建議:
<?php use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Cookie;
<?php namespace Foo { //... } namespace Bar { //... }
<?php namespace My\App; class Foo { public function doSomething() { $ex = new \Exception(); } }
NOTE: 此時,在 Exception類的名稱前加\前綴是告訴PHP在全局中查找Exception,默認會在當前命名空間中查找;