data-id="1190000004892254">
命名空间
命名空间的声明
命名空间在PHP文件的顶部,
命名空间声明语句以namespace开头,随后是一个空格,然后是命名空间的名称,最后以;结尾;
厂商命名空间即下面声明的“Oreilly”是最重要的命名空间;必须具有全局唯一性。
立即学习“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>注意:
同namespace声明一样,在PHP文件顶部使用use关键字,而且在
开头无需加\符号,因为PHP导入是完全限定;
use必须出现在全局作用域中,因为use在编译时使用。
PHP5.6以后可以导入函数和常量;
<code><?php use func Namespace\functionName; functionName();</code>
导入常量:
<code><?php use constant Namespace\CONST_NAME; echo CONST_NAME; </code>
实用技巧
多重导入
如果想在一个PHP文件中导入多个类、接口、函数或者常量,需要使用多个use语句;
不建议:
<code><?php
use Symfony\Component\HttpFoundation\Request,
Symfony\Component\HttpFoundation\Response,
Symfony\Component\HttpFoundation\Cookie;</code>建议:
<code><?php use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Cookie;</code>
PHP允许一个文件定义多个命名空间【强烈不建议】
<code><?php
namespace Foo {
//...
}
namespace Bar {
//...
}</code>全局命名空间
<code><?php
namespace My\App;
class Foo
{
public function doSomething()
{
$ex = new \Exception();
}
}</code>NOTE: 此时,在 Exception类的名称前加\前缀是告诉PHP在全局中查找Exception,默认会在当前命名空间中查找;
以上就介绍了Modern-php 书摘(一)namespace,包括了espace,modern方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号