命名空间在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,默认会在当前命名空间中查找;