PHP命名空间,PHP的命名空间应用详解

PHP的命名空间(namespace)是php5.3之后才有的。这么些定义在C#中早已很已经有了,php中的namespace其实和c#的概念是大同小异的。

对此命名空间,官方文书档案已经说得很详细[查看],小编在那边做了一下试行和小结。

对此命名空间,官方文书档案已经说得很详细[查看],作者在此地做了须臾间施行和小结。

深藏自cnblog,写的要命清晰,谢谢作者‘流金岁月’http://www.cnblogs.com/kuyuecs/p/3556421.html

为啥php中要运用namespace?

取名空间三个最生硬的目标就是消除重名难题,PHP中分裂意五个函数可能类出现同等的名字,不然会产生一个致命的一无所能。这种气象下一旦幸免命名重复就足以缓慢解决,最普及的一种做法是预订叁个前缀。

取名空间一个最显然的指标正是化解重名难点,PHP中不容许多少个函数或许类出现同等的名字,不然会产生三个致命的荒唐。这种情状下一旦幸免命名重复就能够消除,最普及的一种做法是预约二个前缀。

对于命名空间,官方文档已经说得很详细[查看],笔者在此处做了弹指间实行和总计。
命名空间贰个最刚强的目标正是减轻重名难题,PHP中差异意七个函数大概类出现雷同的名字,不然会产生三个沉重的荒谬。这种情况下一旦制止命名重复即可减轻,最遍布的一种做法是预定二个前缀。
例:项目中有七个模块:article和message
board,它们各自有八个拍卖用户留言的类Comment。之后我只怕想要增加对富有用户留言的一部分新闻总计功用,譬喻说笔者想猎取全数留言的多寡。那时候调用它们Comment提供的措施是很好的做法,可是同一时间引进各自的Comment类分明是非常的,代码会出错,在另一个地方重写任何三个Comment也会减低维护性。那那时只可以重构类名,我预定了二个命名法规,在类名前面加上模块名,像那样:Article_Comment、MessageBoard_Comment
能够看看,名字变得十分短,那表示从此使用Comment的时候会写上更多的代码(至少字符多了)。况且,今后倘若要对一一模块扩展更多的部分组合功用,可能是并行调用,发生重名的时候就供给重构名字。当然在品种上马的时候就专注到那些难点,并分明命名法规就会很好的幸免那么些主题材料。另四个消除办法能够思虑选用命名空间。
注明:
本文提到的常量:PHP5.3起首const关键字能够用在类的表面。const和define都是用来声称常量的(它们的分别不详述),不过在命名空间里,define的功力是大局的,而const则效果于近来空中。作者在文中提到的常量是指利用const注脚的常量。
基础命名空间将代码划分出分裂的空间(区域),每一个空间的常量、函数、类(为了偷懒,作者下边都将它们称为成分)的名字互不影响,
那么些有个别类似大家日常提到的‘封装’的概念。
创立三个命名空间须要选拔namespace关键字,那样:
复制代码代码如下:
<?php
//创立叁个名称叫’Article’的命名空间namespace Article;
?>

假如若是不使用namespace,那么各样类在二个种类中的名字就亟须是恒久的。因为php在new的时候不管是调用autoload依旧调用已加载过的类,都存在三个类名对应的公文。所以在尚未namespace的时候,大家会想各样命名准绳来分别不一样的类,比方project1_school1_class1_Student或者project2_school_class_Student。

例:项目中有三个模块:article和message
board,它们分别有叁个管理用户留言的类Comment。之后笔者恐怕想要扩大对具备用户留言的部分音讯总结效用,譬喻说笔者想取得全部留言的数码。那时候调用它们Comment提供的诀窍是很好的做法,可是同一时间引进各自的Comment类显著是那么些的,代码会出错,在另四个地点重写任何多少个Comment也会下滑维护性。那那时只可以重构类名,笔者预定了八个命名准绳,在类名前面加上模块名,像这么:Article_Comment、MessageBoard_Comment

例:项目中有七个模块:article和message
board,它们分别有贰个拍卖用户留言的类Comment。之后笔者可能想要扩充对具备用户留言的有的音讯计算成效,比如说作者想赢得全数留言的数量。那时候调用它们Comment提供的法子是很好的做法,然则还要引进各自的Comment类分明是老大的,代码会出错,在另二个地方重写任何多少个Comment也会稳中有降维护性。那那时只好重构类名,笔者预订了贰个命名法则,在类名前面加上模块名,像那样:阿特icle_Comment、MessageBoard_Comment

要注意的是,当前剧本文件的首先个命名空间前面不能够有别的代码,上面包车型大巴写法都以一无所能的:
复制代码代码如下:
//例一//在剧本后面写了有的逻辑代码
<?php
$path = “/”;
class Comment { }
namespace Article;
?>

引进namespace之后就能够将那一个有效避让了,三个namespace就一定于对应三个文件路线,查找那些类的时候,就可以去相应的文书路线查找类定义文件了。

可以看来,名字变得相当长,那表示现在选用Comment的时候会写上更加多的代码(至少字符多了)。并且,今后假设要对一一模块扩展更加的多的一些结合职能,恐怕是相互调用,产生重名的时候就须要重构名字。当然在项目发轫的时候就专注到那几个难题,并规定命名准则就会很好的制止那么些主题材料。另二个消除方法能够虚构选用命名空间。

能够见见,名字变得十分长,那表示从此选取Comment的时候会写上越多的代码(至少字符多了)。况兼,今后要是要对各类模块扩大更加多的部分组成作用,只怕是相互调用,产生重名的时候就供给重构名字。当然在品种上马的时候就注意到那些主题素材,并显明命名法则就能够很好的防止这么些难题。另一个缓慢解决方法可以思量选取命名空间。

//例二//在本子前面输出了某些字符
<html></html><?php
namespace Article;
?>

注明:

注明:

注明:

怎么要说第二个命名空间啊?因为同一脚本文件中得以成立四个命名空间。

正文提到的常量:PHP5.3开首const关键字能够用在类的表面。const和define都是用来声称常量的(它们的差别不详述),可是在命名空间里,define的法力是全局的,而const则效果于当下空间。小编在文中涉及的常量是指使用const注明的常量。

本文提到的常量:PHP5.3开首const关键字能够用在类的外界。const和define都是用来声称常量的(它们的区分不详述),但是在命名空间里,define的效果是全局的,而const则效果于近些日子空中。小编在文中提到的常量是指利用const注脚的常量。

正文提到的常量:PHP5.3起始const关键字能够用在类的外表。const和define都是用来声称常量的(它们的界别不详述),可是在命名空间里,define的职能是大局的,而const则效果于当下空间。小编在文中涉及的常量是指使用const注脚的常量。

下边笔者成立了七个命名空间,顺便为这一个空中各自增添了三个Comment类成分:
复制代码代码如下:
<?php
//创造叁个名称为’Article’的命名空间namespace Article;
//此Comment属于Article空间的因素class Comment { }
//成立一个名字为’MessageBoard’的命名空间namespace MessageBoard;
//此Comment属于MessageBoard空间的因素class Comment { }?>

基础
取名空间将代码划分出差别的空间(区域),每种空间的常量、函数、类(为了偷懒,作者上面都将它们称为成分)的名字互不影响,
那个略带类似大家经常提到的‘封装’的定义。

基础 命名空间将代码划分出不一致的空中(区域),各类空间的常量、函数、类(为了偷懒,作者下面都将它们称为成分)的名字互不影响,
那一个略带类似大家平日提到的‘封装’的概念。

基础 取名空间将代码划分出不相同的半空中(区域),每种空间的常量、函数、类(为了偷懒,我上面都将它们称为成分)的名字互不影响,
那几个略带类似大家平时提到的‘封装’的定义。

在不相同空间之间不得以一向调用别的成分,须求动用命名空间的语法:
复制代码代码如下:
<?php
namespace Article;
class Comment { }
namespace MessageBoard;
class Comment { }
//调用当前空间(MessageBoard)的Comment类$comment = new Comment();
//调用Article空间的Comment类$article_comment = new
\Article\Comment();
?>

namespace的概念和选择

创办三个命名空间要求采纳namespace关键字,这样:

成立三个命名空间供给选择namespace关键字,那样:

能够看来,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路径的语法:
\空间名\元素名

定义:

复制代码 代码如下:

复制代码代码如下:

而外类之外,对函数和常量的用法是同等的,下边小编为七个空中创立了新的成分,并在MessageBoard空间中输出了它们的值。
复制代码代码如下:
<?php
namespace Article;
const PATH = ‘/article’;
function getCommentTotal() { return 100;}
class Comment { }
namespace MessageBoard;
const PATH = ‘/message_board’;
function getCommentTotal() { return 300;}
class Comment { }
//调用当前空间的常量、函数和类echo PATH; ///message_boardecho
getCommentTotal(); //300$comment = new Comment();
//调用Article空间的常量、函数和类echo \Article\PATH; ///articleecho
\Article\getCommentTotal(); //100$article_comment = new
\Article\Comment();
?>

<?php
 
namespace Myproject;
或者

<?php

<?php

下一场本人实在获得了Article空间的要素数据。

<?php
 
namespace Myproject {
 
}
使用:

//创制二个名称为’Article’的命名空间
namespace Article;

 

子空间取名空间的调用语法像文件路径一样是有道理的,它同意大家自定义子空间来呈报各种空间之间的涉嫌。
对不起小编忘了说,article和message
board那五个模块其实都是高居同贰个blog项目内。借使用命名空间来阐明它们的关联,是这么:
复制代码代码如下:
<?php
//小编用如此的命名空间表示处于blog下的article模块namespace
Blog\Article;
class Comment { }
//作者用那样的命名空间表示处于blog下的message board模块namespace
Blog\MessageBoard;
class Comment { }
//调用当前空间的类$comment = new Comment();
//调用Blog\Article空间的类$article_comment = new
\Blog\Article\Comment();
?>

<?php
 
use Myproject/School;
<?php
 
use Myproject/Schoolas School1;  // 别名
命名空间是运行时剖析的。use就一定于一种证明,并不分析和加载。举个例子上面那些事例:

?>

//创立一个名称叫’Article’的命名空间
namespace Article;

再正是,子空间还可以定义比很多等级次序,比方说 Blog\Article\Archives\Date

test.php

要留意的是,当前剧本文件的第贰个命名空间前面不可能有任何代码,下边包车型大巴写法都是荒谬的:

?>

公家空间自笔者有二个common_inc.php脚本文件,里面有一部分好用的函数和类:
复制代码代码如下:
<?php
function getIP() { }
class FilterXSS { }
?>

<?php
use my\name;
require_once(“/home/yejianfeng/handcode/test/namespace1.php”);
$a =new my\name\A();
$a->Print1();
namespace1.php

复制代码 代码如下:

要专注的是,当前剧本文件的第三个命名空间前边不能够有别的轮代理公司码,上边包车型客车写法都是不当的:

在一个命名空间里引进这么些本子,脚本里的因素不会归属到那个命名空间。即便那几个本子里不曾概念另外命名空间,它的成分就始终高居公共空间中:
复制代码代码如下:
<?php
namespace Blog\Article;
//引进脚本文件include ‘./common_inc.php’;
$filter_XSS = new FilterXSS();
//出现致命错误:找不到Blog\Article\FilterXSS类
$filter_XSS = new \FilterXSS(); //正确
?>

<?php
namespace my\name;
class A {
        public function Print1(){
                echo 11;
        }
}

//例一
//在本子后面写了一些逻辑代码

复制代码代码如下:

调用公共空间的章程是直接在要素名称前加 \
就足以了,不然PHP分析器会以为自个儿想调用当前空中下的成分。除了自定义的成分,还包蕴PHP自带的因素,都属于公共空间。

虽然require_once在use上面,也是能够不荒谬运维的,因为程序独有在new
my\name\A()的时候才去加载命名空间my\name

<?php

//例一
//在本子前边写了部分逻辑代码

要提一下,其实公共空间的函数和常量不用加 \
也得以平常调用(不了然PHP为啥要如此做),不过为了准确区分成分,依旧建议调用函数的时候增加
名称术语在说别称和导入此前,需求掌握关于空间二种名称的术语,以及PHP是何许深入分析它们的。官方文档说得那么些好,笔者就平素拿来套了。
1.非限制名称,或不含有前缀的类名称,比如 $comment = new
Comment();。假若当前定名空间是Blog\阿特icle,Comment将被分析为Blog\Article\Comment。假诺利用Comment的代码不含有在其他命名空间中的代码(全局空间中),则Comment会被分析为Comment。2.限量名称,或带有前缀的称谓,举例$comment = new
Article\Comment();。即使当前的命名空间是Blog,则Comment会被分析为Blog\Article\Comment。假使应用Comment的代码不含有在其余命名空间中的代码(全局空间中),则Comment会被解析为Comment。3.全然限定名称,或带有了全局前缀操作符的称呼,举例$comment = new
\Article\Comment();。在这种情状下,Comment总是被分析为代码中的文字名(literal
name)Article\Comment。
实质上能够把那三种名称类比为文件名(举个例子 comment.php)、相对路线名(例如./article/comment.php)、绝对路线名(比如/blog/article/comment.php),那样也许会更易于明白。
本人用了多少个示范来表示它们:
复制代码代码如下:
<?php
//制造空间Blognamespace Blog;
class Comment { }
//非限定名称,表示这段日子Blog空间//这么些调用将被分析成
Blog\Comment();$blog_comment = new Comment();
//限定名称,表示相对于Blog空间//那些调用将被分析成
Blog\Article\Comment();$article_comment = new Article\Comment();
//类后边未有反斜杆
//完全限定名称,表示相对于Blog空间//那几个调用将被分析成
Blog\Comment();$article_comment = new \Blog\Comment();
//类前面有反斜杆
//完全限定名称,表示相对于Blog空间//那些调用将被深入分析成
Blog\Article\Comment();$article_comment = new
\Blog\Article\Comment(); //类前边有反斜杆
//创设Blog的子空间Articlenamespace Blog\Article;
class Comment { }
?>

全局类和命名空间类

$path = “/”;

 

实际上从前本人就径直在行使非限定名称和完全限定名称,以后它们终于能够叫出它们的名称了。

只要要new多个大局类应用 new \A()

class Comment { }

<?php

别称和导入别名和导入能够用作是调用命名空间成分的一种连忙格局。PHP并不帮忙导入函数或常量。
它们都以透过利用use操作符来促成:
复制代码代码如下:
<?php
namespace Blog\Article;
class Comment { }
//成立一个BBS空间(小编有希图开个论坛)namespace BBS;
//导入一个命名空间use
Blog\Article;//导入命名空间后可采纳范围名称调用成分$article_comment =
new Article\Comment();
//为命名空间利用别称use Blog\Article as
Arte;//使用外号替代空间名$article_comment = new Arte\Comment();
//导入三个类use
Blog\Article\Comment;//导入类后可接纳非限定名称调用成分$article_comment
= new Comment();
//为类使用别称use Blog\Article\Comment as
Comt;//使用小名代替空间名$article_comment = new Comt();
?>

倘若要new三个命名空间类,使用new my\namespace\A()

namespace Article;

$path = “/”;

本人注意到,如果导入成分的时候,当前空间有一样的名字成分将会怎么着?显著结果会发出致命错误。

取名空间的一一

?>

class Comment { }

例:
复制代码代码如下:
<?php
namespace Blog\Article;
class Comment { }
namespace BBS;
class Comment { }
Class Comt { }
//导入叁个类use Blog\Article\Comment;$article_comment = new
Comment(); //与当下空中的Comment发生争论,程序发生致命错误
//为类应用别称use Blog\Article\Comment as Comt;$article_comment = new
Comt(); //与前段时间空间的Comt爆发争持,程序产生致命错误
?>

自从有了命名空间之后,最轻便失误的该是使用类的时候,那么些类的搜索路线是怎样的了。

 

namespace Article;

动态调用PHP提供了namespace关键字和NAMESPACE法力常量动态的走访成分,NAMESPACE能够透过结合字符串的款型来动态访谈:
复制代码代码如下:
<?php
namespace Blog\Article;
const PATH = ‘/Blog/article’;
class Comment { }
//namespace关键字表示这段日子空间echo namespace\PATH;
///Blog/article$comment = new namespace\Comment();
//法力常量NAMESPACE的值是眼前空中名称echo NAMESPACE;
//Blog\Article//可以组合成字符串并调用$comment_class_name =
NAMESPACE . ‘\Comment’;$comment = new $comment_class_name();
?>

一旦能弄清楚manual中的那个例子就可以全体弄驾驭搜索顺序了。

//例二
//在本子后边输出了有些字符

?>

字符串方式调用难点地点的动态调用的例子中,大家看来了字符串方式的动态调用格局,假若要接纳这种艺术要留意三个难点。

<?php
namespace A;
use B\D, C\Eas F;
 
// 函数调用
 
foo();      // 首先尝试调用定义在命名空间”A”中的函数foo()
            // 再品尝调用全局函数 “foo”
 
\foo();     // 调用全局空间函数 “foo”
 
my\foo();   // 调用定义在命名空间”A\my”中函数 “foo”
 
F();        // 首先尝试调用定义在命名空间”A”中的函数 “F”
            // 再品尝调用全局函数 “F”
 
// 类引用
 
new B();   // 创立命名空间 “A” 中定义的类 “B” 的四个对象
            // 假如未找到,则尝试自动装载类 “A\B”
 
new D();   // 使用导入法规,创制命名空间 “B” 中定义的类 “D” 的四个对象
            // 若是未找到,则尝试自动装载类 “B\D”
 
new F();   // 使用导入准绳,创造命名空间 “C” 中定义的类 “E” 的三个对象
            // 借使未找到,则尝试自动装载类 “C\E”
 
new \B();  // 创拟订义在大局空间中的类 “B” 的一个对象
            // 假使未开采,则尝试自动装载类 “B”
 
new \D();  // 创造定义在大局空间中的类 “D” 的一个指标
            // 若是未察觉,则尝试自动装载类 “D”
 
new \F();  // 创立定义在大局空间中的类 “F” 的三个对象
            // 借使未发掘,则尝试自动装载类 “F”
 
// 调用另二个命名空间中的静态方法或命名空间函数
 
B\foo();    // 调用命名空间 “A\B” 中函数 “foo”
 
B::foo();   // 调用命名空间 “A” 中定义的类 “B” 的 “foo” 方法
            // 纵然未找到类 “A\B” ,则尝试自动装载类 “A\B”
 
D::foo();   // 使用导入法则,调用命名空间 “B” 中定义的类 “D” 的 “foo”
方法
            // 如果类 “B\D” 未找到,则尝试自动装载类 “B\D”
 
\B\foo();   // 调用命名空间 “B” 中的函数 “foo”
 
\B::foo();  // 调用全局空间中的类 “B” 的 “foo” 方法
            // 假设类 “B” 未找到,则尝试自动装载类 “B”
 
// 当前命名空间中的静态方法或函数
 
A\B::foo();   // 调用命名空间 “A\A” 中定义的类 “B” 的 “foo” 方法
              // 如果类 “A\A\B” 未找到,则尝试自动装载类 “A\A\B”
 
\A\B::foo();  // 调用命名空间 “A\B” 中定义的类 “B” 的 “foo” 方法
              // 如果类 “A\B” 未找到,则尝试自动装载类 “A\B”
?>

<html></html>
<?php

 

1. 运用双引号的时候特殊字符恐怕被转义
复制代码代码如下:
<?php
namespace Blog\Article;
class name { }
//小编是想调用Blog\Article\name$class_name = NAMESPACE . “\name”;
//但是\n将被转义为换行符
$name = new $class_name(); //爆发致命错误
?>

始建多个命名空间必要利用namespace关键字,那样:

namespace Article;

//例二
//在剧本后面输出了一部分字符

2. 不会以为是限量名称

 

?>

<html></html>
<?php

PHP命名空间,PHP的命名空间应用详解。PHP在编写翻译脚本的时候就规定了元素所在的空中,以及导入的场馆。而在解析脚本时字符串情势调用只可以以为是非限定名称和完全限定名称,而永世不容许是限制名称。
复制代码代码如下:
<?php
namespace Blog;
//导入Common类use

<?php
 

干什么要说第叁个命名空间啊?因为同一脚本文件中能够成立七个命名空间。

namespace Article;

Blog\Article\Common;//作者想使用非限定名称调用Blog\Article\Common$common_class_name

‘Common’;//实际会被当作非限定名称,也就表示近期空中的Common类,但自己当下类未有创设Common类$common
= new $common_class_name(); //爆发致命错误:Common类不设有
//作者想选拔范围名称调用Blog\Article\Common$common_class_name =
‘Article\Common’;//实际会被看成完全限定名称,也就意味着Article空间下的Common类,但作者下边只定义了Blog\Article空间实际不是Article空间$common
= new $common_class_name(); //发生致命错误:Article\Common类空中楼阁
namespace Blog\Article;
class Common { }
?>

总结本人对PHP的命名空间正好接触,也无法随意给一部分尚无进行的建议。小编个人感觉命名空间的效率和功力都很庞大,若是要写插件或然通用库的时候再也不用怀恋重名难题。可是只重要项目目展开到早晚水平,要通过增添命名空间去消除重名难题,小编认为职业量不会比重构名字少。也不得不承认它的语法会对项目加多一定的复杂度,因而从类型一起先的时候就应有很好的安顿性它,并制订二个命名规范。

//创制一个名字为’阿特icle’的命名空间
namespace Article;

下面作者创制了八个命名空间,顺便为这七个空中各自加多了贰个Comment类成分:

?>

?>

复制代码 代码如下:

干什么要说第一个命名空间啊?因为同一脚本文件中能够成立多少个命名空间。

要留神的是,当前剧本文件的率先个命名空间前边不可能有别的代码,下边包车型地铁写法都以错误的:

<?php

 

 

//成立一个名称为’Article’的命名空间
namespace Article;

下边笔者创立了多少个命名空间,顺便为那八个空中各自增多了三个Comment类成分:

//例一
//在剧本后边写了部分逻辑代码
 

//此Comment属于Article空间的因素
class Comment { }

复制代码代码如下:

<?php

//创设一个名叫’MessageBoard’的命名空间
namespace MessageBoard;

<?php

$path = “/”;

//此Comment属于MessageBoard空间的因素
class Comment { }
?>

 

class Comment { }

在不一样空中之间不能从来调用别的成分,需求利用命名空间的语法:

//创立三个名叫’Article’的命名空间
namespace Article;

namespace Article;

复制代码 代码如下:

//此Comment属于Article空间的因素
class Comment { }

?>

<?php

//创造叁个名叫’MessageBoard’的命名空间
namespace MessageBoard;

 

namespace Article;

//此Comment属于MessageBoard空间的成分
class Comment { }
?>

//例二
//在剧本前边输出了一部分字符

class Comment { }

在区别空间之间不得以向来调用另外成分,须求选取命名空间的语法:

<html></html>
<?php

namespace MessageBoard;

复制代码代码如下:

namespace Article;

class Comment { }

<?php

?>

//调用当前空间(MessageBoard)的Comment类
$comment = new Comment();

 

何以要说第七个命名空间吧?因为同一脚本文件中得以成立多少个命名空间。

//调用Article空间的Comment类
$article_comment = new \Article\Comment();

namespace Article;

 

?>

class Comment { }

上面作者创建了两个命名空间,顺便为那五个空中各自增加了三个Comment类成分:

能够看到,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路线的语法:
\空间名\元素名

namespace MessageBoard;

 

除去类之外,对函数和常量的用法是平等的,上边笔者为多少个空中成立了新的成分,并在MessageBoard空间中输出了它们的值。

class Comment { }

<?php
 

复制代码 代码如下:

//调用当前空间(MessageBoard)的Comment类
$comment = new Comment();

//成立二个名称为’Article’的命名空间
namespace Article;

<?php

//调用Article空间的Comment类
$article_comment = new \Article\Comment();

//此Comment属于Article空间的要素
class Comment { }

namespace Article;

?>

//创设二个名称为’MessageBoard’的命名空间
namespace MessageBoard;

const PATH = ‘/article’;

能够看看,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路线的语法:
\空间名\元素名

//此Comment属于MessageBoard空间的要素
class Comment { }
?>

function getCommentTotal() {
    return 100;
}

 

在分化空间之间不得以从来调用另外成分,供给选用命名空间的语法:

class Comment { }

除此而外类之外,对函数和常量的用法是一样的,下边笔者为四个空中创建了新的元素,并在MessageBoard空间中输出了它们的值。

 

namespace MessageBoard;

复制代码代码如下:

<?php
 

const PATH = ‘/message_board’;

<?php

namespace Article;

function getCommentTotal() {
    return 300;
}

 

class Comment { }

class Comment { }

namespace Article;

namespace MessageBoard;

//调用当前空间的常量、函数和类
echo PATH; ///message_board
echo getCommentTotal(); //300
$comment = new Comment();

const PATH = ‘/article’;

class Comment { }

//调用Article空间的常量、函数和类
echo \Article\PATH; ///article
echo \Article\getCommentTotal(); //100
$article_comment = new \Article\Comment();

function getCommentTotal() {
    return 100;
}

//调用当前空中(MessageBoard)的Comment类
$comment = new Comment();

?>

class Comment { }

//调用Article空间的Comment类
$article_comment = new \Article\Comment();

下一场作者真的获得了Article空间的要素数据。

namespace MessageBoard;

?>

子空间 命名空间的调用语法像文件路线同样是有道理的,它同意大家自定义子空间来描述各样空间之间的关联。

const PATH = ‘/message_board’;

能够见见,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路线的语法:
\空间名\元素名

对不起小编忘了说,article和message
board那多个模块其实都以处于同一个blog项目内。假诺用命名空间来抒发它们的涉及,是这样:

function getCommentTotal() {
    return 300;
}

 

复制代码 代码如下:

class Comment { }

除此而外类之外,对函数和常量的用法是一样的,下边小编为八个空中创设了新的要素,并在MessageBoard空间中输出了它们的值。

<?php

//调用当前空中的常量、函数和类
echo PATH; ///message_board
echo getCommentTotal(); //300
$comment = new Comment();

 

//笔者用这么的命名空间表示处于blog下的article模块
namespace Blog\Article;

//调用Article空间的常量、函数和类
echo \Article\PATH; ///article
echo \Article\getCommentTotal(); //100
$article_comment = new \Article\Comment();

<?php
 

class Comment { }

?>

namespace Article;

//小编用这么的命名空间表示处于blog下的message board模块
namespace Blog\MessageBoard;

接下来小编真的获得了阿特icle空间的元素数据。

const PATH = ‘/article’;

class Comment { }

 

function getCommentTotal() {
    return 100;
}

//调用当前空中的类
$comment = new Comment();

子空间 取名空间的调用语法像文件路线同样是有道理的,它同意大家自定义子空间来陈述各类空间之间的涉及。

class Comment { }

//调用Blog\Article空间的类
$article_comment = new \Blog\Article\Comment();

对不起笔者忘了说,article和message
board这七个模块其实都以高居同三个blog项目内。即便用命名空间来表达它们的涉嫌,是那样:

namespace MessageBoard;

?>

复制代码代码如下:

const PATH = ‘/message_board’;

与此同期,子空间还足以定义非常多档次,举例说 Blog\Article\Archives\Date

<?php

function getCommentTotal() {
    return 300;
}

公物空间 本身有一个common_inc.php脚本文件,里面有一部分好用的函数和类:

 

class Comment { }

复制代码 代码如下:

//笔者用这么的命名空间表示处于blog下的article模块
namespace Blog\Article;

//调用当前空间的常量、函数和类
echo PATH; ///message_board
echo getCommentTotal(); //300
$comment = new Comment();

<?php

class Comment { }

//调用Article空间的常量、函数和类
echo \Article\PATH; ///article
echo \Article\getCommentTotal(); //100
$article_comment = new \Article\Comment();

function getIP() { }

//我用这么的命名空间表示处于blog下的message board模块
namespace Blog\MessageBoard;

?>

class FilterXSS { }

class Comment { }

接下来本人真的获得了Article空间的要素数据。

?>

//调用当前空间的类
$comment = new Comment();

 

在一个命名空间里引入这么些本子,脚本里的元素不会归属到这么些命名空间。假诺那一个剧本里不曾概念另外命名空间,它的要素就始终高居公共空间中:

//调用Blog\Article空间的类
$article_comment = new \Blog\Article\Comment();

子空间
取名空间的调用语法像文件路线同样是有道理的,它同意我们自定义子空间来陈说各类空间之间的关系。

复制代码 代码如下:

?>

对不起作者忘了说,article和message
board那三个模块其实都以地处同三个blog项目内。借使用命名空间来表述它们的关系,是如此:

<?php

何况,子空间还足以定义比非常多等级次序,例如说 Blog\Article\Archives\Date

 

namespace Blog\Article;

 

<?php
 

//引进脚本文件
include ‘./common_inc.php’;

公家空间 自身有一个common_inc.php脚本文件,里面有一部分好用的函数和类:

//小编用那样的命名空间表示处于blog下的article模块
namespace Blog\Article;

$filter_XSS = new FilterXSS();
//出现致命错误:找不到Blog\Article\FilterXSS类

复制代码代码如下:

class Comment { }

$filter_XSS = new \FilterXSS(); //正确

<?php

//小编用如此的命名空间表示处于blog下的message board模块
namespace Blog\MessageBoard;

?>

 

class Comment { }

调用公共空间的格局是从来在要素名称前加 \
就能够了,不然PHP深入分析器会感到自个儿想调用当前空间下的成分。除了自定义的元素,还富含PHP自带的因素,都属于公共空间。

function getIP() { }

//调用当前空中的类
$comment = new Comment();

要提一下,其实公共空间的函数和常量不用加 \
也能够平常调用(不知底PHP为啥要这么做),可是为了准确区分元素,如故建议调用函数的时候拉长
\

class FilterXSS { }

//调用Blog\Article空间的类
$article_comment = new \Blog\Article\Comment();

名称术语 在说小名和导入从前,须要领会关于空间二种名称的术语,以及PHP是什么深入分析它们的。官方文书档案说得十三分好,小编就直接拿来套了。

?>

?>

1.非限量名称,或不包括前缀的类名称,比如 $comment = new
Comment();。若是当前命名空间是Blog\Article,Comment将被剖析为Blog\Article\Comment。如若使用Comment的代码不富含在其余命名空间中的代码(全局空间中),则Comment会被分析为Comment。

在贰个命名空间里引进那个剧本,脚本里的要素不会归属到那一个命名空间。倘使那几个剧本里从未定义其余命名空间,它的因素就一直处于公共空间中:

与此同期,子空间还足以定义相当多档案的次序,比方说 Blog\Article\Archives\Date

2.限量名称,或带有前缀的称呼,举例 $comment = new
Article\Comment();。借使当前的命名空间是Blog,则Comment会被剖判为Blog\Article\Comment。假若选用Comment的代码不饱含在别的命名空间中的代码(全局空间中),则Comment会被深入分析为Comment。

复制代码代码如下:

 

3.全然限定名称,或带有了大局前缀操作符的名目,比方 $comment = new
\Article\Comment();。在这种状态下,Comment总是被分析为代码中的文字名(literal
name)Article\Comment。
 

<?php

国有空间
本人有八个common_inc.php脚本文件,里面有一对好用的函数和类:

骨子里能够把那二种名称类比为文件名(比方 comment.php)、相对路线名(举例./article/comment.php)、相对路线名(举个例子/blog/article/comment.php),那样可能会更便于掌握。

 

 

本人用了多少个示范来表示它们:

namespace Blog\Article;

<?php
 

复制代码 代码如下:

//引进脚本文件
include ‘./common_inc.php’;

function getIP() { }

<?php

$filter_XSS = new FilterXSS();
//出现致命错误:找不到Blog\Article\FilterXSS类

class FilterXSS { }

//成立空间Blog
namespace Blog;

$filter_XSS = new \FilterXSS(); //正确

?>

class Comment { }

?>

在一个命名空间里引进这些本子,脚本里的成分不会归属到这么些命名空间。就算这么些剧本里不曾概念别的命名空间,它的要素就始终高居公共空间中:

//非限定名称,表示目前Blog空间
//那个调用将被分析成 Blog\Comment();
$blog_comment = new Comment();

调用公共空间的主意是直接在要素名称前加 \
就能够了,不然PHP解析器会感到本人想调用当前空间下的因素。除了自定义的要素,还满含PHP自带的要素,都属于国有空间。

 

//限定名称,表示相对于Blog空间
//那个调用将被剖析成 Blog\Article\Comment();
$article_comment = new Article\Comment(); //类前边未有反斜杆\

 

<?php
 

//完全限定名称,表示相对于Blog空间
//那些调用将被解析成 Blog\Comment();
$article_comment = new \Blog\Comment(); //类前边有反斜杆\

要提一下,其实公共空间的函数和常量不用加 \
也足以不奇怪调用(不清楚PHP为何要那样做),可是为了准确区分元素,依然建议调用函数的时候增加
\

namespace Blog\Article;

//完全限定名称,表示相对于Blog空间
//那一个调用将被剖判成 Blog\Article\Comment();
$article_comment = new \Blog\Article\Comment(); //类前边有反斜杆\

名称术语 在说小名和导入以前,要求领悟有关空间三种名称的术语,以及PHP是何等分析它们的。官方文书档案说得老大好,作者就一贯拿来套了。

//引进脚本文件
include ‘./common_inc.php’;

//创造Blog的子空间Article
namespace Blog\Article;

1.非限制名称,或不带有前缀的类名称,比方 $comment = new
Comment();。假若当前定名空间是Blog\Article,Comment将被深入分析为Blog\Article\Comment。即使运用Comment的代码不带有在另外命名空间中的代码(全局空间中),则Comment会被分析为Comment。

$filter_XSS = new FilterXSS();
//出现致命错误:找不到Blog\Article\FilterXSS类

class Comment { }

2.限制名称,或富含前缀的名目,比方 $comment = new
Article\Comment();。假如当前的命名空间是Blog,则Comment会被分析为Blog\Article\Comment。假诺利用Comment的代码不包含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。

$filter_XSS = new \FilterXSS(); //正确

?>

3.通通限定名称,或带有了全局前缀操作符的名号,举个例子 $comment = new
\Article\Comment();。在这种情状下,Comment总是被深入分析为代码中的文字名(literal
name)Article\Comment。
 

?>

实质上前边小编就径直在动用非限定名称和完全限定名称,以往它们到底得以叫出它们的称谓了。

实际能够把那三种名称类比为文件名(举例 comment.php)、绝对路线名(比方./article/comment.php)、相对路线名(举例/blog/article/comment.php),那样大概会更易于掌握。

调用公共空间的章程是一贯在要素名称前加 \
就足以了,否则PHP剖判器会以为小编想调用当前空中下的元素。除了自定义的因素,还包罗PHP自带的因素,都属于集体空间。

外号和导入 外号和导入能够看做是调用命名空间成分的一种赶快方式。PHP并不协助导入函数或常量。

自己用了几个示范来表示它们:

 

它们都以通过运用use操作符来贯彻:

复制代码代码如下:

要提一下,其实公共空间的函数和常量不用加 \
也可以健康调用(不知道PHP为啥要这么做),可是为了准确区分成分,仍旧建议调用函数的时候增加
\

复制代码 代码如下:

<?php

名称术语
在说外号和导入在此以前,需求掌握有关空间二种名称的术语,以及PHP是如何深入分析它们的。官方文书档案说得相当好,笔者就径直拿来套了。

<?php

 

1.非限量名称,或不带有前缀的类名称,举例 $comment = new
Comment();。假使当前命名空间是Blog\Article,Comment将被深入分析为Blog\Article\Comment。假设使用Comment的代码不满含在任何命名空间中的代码(全局空间中),则Comment会被深入分析为Comment。

namespace Blog\Article;

//创设空间Blog
namespace Blog;

2.限制名称,或包涵前缀的名目,譬喻 $comment = new
Article\Comment();。要是当前的命名空间是Blog,则Comment会被拆解分析为Blog\Article\Comment。假诺利用Comment的代码不含有在任何命名空间中的代码(全局空间中),则Comment会被深入分析为Comment。

class Comment { }

class Comment { }

3.通通限定名称,或带有了全局前缀操作符的名号,例如 $comment = new
\Article\Comment();。在这种状态下,Comment总是被剖析为代码中的文字名(literal
name)Article\Comment。
 

//创立叁个BBS空间(作者有计划开个论坛)
namespace BBS;

//非限定名称,表示近日Blog空间
//那个调用将被解析成 Blog\Comment();
$blog_comment = new Comment();

其实能够把这两种名称类比为文件名(举个例子 comment.php)、相对路线名(举个例子./article/comment.php)、相对路径名(举个例子/blog/article/comment.php),那样也许会更便于掌握。

//导入二个命名空间
use Blog\Article;
//导入命名空间后可采取限制名称调用成分
$article_comment = new Article\Comment();

//限定名称,表示绝对于Blog空间
//那个调用将被剖析成 Blog\Article\Comment();
澳门葡京备用网址,$article_comment = new Article\Comment(); //类前面未有反斜杆\

自家用了多少个示范来表示它们:

//为命名空间应用别称
use Blog\Article as Arte;
//使用小名取代空间名
$article_comment = new Arte\Comment();

//完全限定名称,表示相对于Blog空间
//这几个调用将被剖判成 Blog\Comment();
$article_comment = new \Blog\Comment(); //类前边有反斜杆\

 

//导入叁个类
use Blog\Article\Comment;
//导入类后可选择非限定名称调用成分
$article_comment = new Comment();

//完全限定名称,表示相对于Blog空间
//这几个调用将被解析成 Blog\Article\Comment();
$article_comment = new \Blog\Article\Comment(); //类前边有反斜杆\

<?php
 

//为类应用小名
use Blog\Article\Comment as Comt;
//使用外号代替空间名
$article_comment = new Comt();

//创设Blog的子空间Article
namespace Blog\Article;

//创建空间Blog
namespace Blog;

?>

class Comment { }

class Comment { }

作者注意到,如酚酞入成分的时候,当前空中有一致的名字成分将会如何?显明结果会时有发生致命错误。

?>

//非限定名称,表示方今Blog空间
//那些调用将被深入分析成 Blog\Comment();
$blog_comment = new Comment();

例:

骨子里从前本人就向来在动用非限定名称和完全限定名称,以后它们终于能够叫出它们的称呼了。

//限定名称,表示相对于Blog空间
//那些调用将被剖判成 Blog\Article\Comment();
$article_comment = new Article\Comment(); //类前面未有反斜杆\

复制代码 代码如下:

 

//完全限定名称,表示绝对于Blog空间
//那几个调用将被分析成 Blog\Comment();
$article_comment = new \Blog\Comment(); //类后面有反斜杆\

<?php

小名和导入 外号和导入可以看做是调用命名空间成分的一种急忙格局。PHP并不支持导入函数或常量。

//完全限定名称,表示绝对于Blog空间
//这几个调用将被深入分析成 Blog\Article\Comment();
$article_comment = new \Blog\Article\Comment(); //类前边有反斜杆\

namespace Blog\Article;

它们都是经过应用use操作符来贯彻:

//创设Blog的子空间阿特icle
namespace Blog\Article;

class Comment { }

复制代码代码如下:

class Comment { }

namespace BBS;

<?php

?>

class Comment { }

 

其实从前本人就平素在应用非限定名称和完全限定名称,未来它们终于能够叫出它们的称呼了。

Class Comt { }

namespace Blog\Article;

 

//导入三个类
use Blog\Article\Comment;
$article_comment = new Comment();
//与当下空间的Comment爆发抵触,程序爆发致命错误

class Comment { }

别名和导入
别名和导入能够看作是调用命名空间成分的一种神速情势。PHP并不援救导入函数或常量。

//为类应用别名
use Blog\Article\Comment as Comt;
$article_comment = new Comt();
//与当前空中的Comt产生争辩,程序发生致命错误

//创立三个BBS空间(小编有打算开个论坛)
namespace BBS;

它们都以通过运用use操作符来贯彻:

?>

//导入二个命名空间
use Blog\Article;
//导入命名空间后可利用范围名称调用成分
$article_comment = new Article\Comment();

 

动态调用
PHP提供了namespace关键字和__NAMESPACE__魔法常量动态的走访成分,__NAMESPACE__能够经过整合字符串的情势来动态访谈:

//为命名空间应用别称
use Blog\Article as Arte;
//使用小名代替空间名
$article_comment = new Arte\Comment();

<?php
 

复制代码 代码如下:

//导入二个类
use Blog\Article\Comment;
//导入类后可应用非限定名称调用元素
$article_comment = new Comment();

namespace Blog\Article;

<?php

//为类使用别称
use Blog\Article\Comment as Comt;
//使用别称替代空间名
$article_comment = new Comt();

class Comment { }

namespace Blog\Article;

?>

//成立叁个BBS空间(小编有准备开个论坛)
namespace BBS;

const PATH = ‘/Blog/article’;

自己细心到,若是导入成分的时候,当前空间有平等的名字成分将会怎么着?明显结果会生出致命错误。

//导入多个命名空间
use Blog\Article;
//导入命名空间后可选取范围名称调用成分
$article_comment = new Article\Comment();

class Comment { }

 

//为命名空间应用外号
use Blog\Article as Arte;
//使用小名取代空间名
$article_comment = new Arte\Comment();

//namespace关键字表示如今空中
echo namespace\PATH; ///Blog/article
$comment = new namespace\Comment();

例:

//导入叁个类
use Blog\Article\Comment;
//导入类后可选择非限定名称调用元素
$article_comment = new Comment();

//法力常量__NAMESPACE__的值是眼前空中名称
echo __NAMESPACE__; //Blog\Article
//可以组合成字符串并调用
$comment_class_name = __NAMESPACE__ . ‘\Comment’;
$comment = new $comment_class_name();

复制代码代码如下:

//为类使用外号
use Blog\Article\Comment as Comt;
//使用别称替代空间名
$article_comment = new Comt();

?>

<?php

?>

字符串格局调用难点
上边的动态调用的事例中,我们看到了字符串情势的动态调用格局,假若要动用这种艺术要稳重多少个难点。

 

本身留神到,借使导入成分的时候,当前空间有平等的名字成分将会怎么样?显明结果会时有产生致命错误。

1. 接纳双引号的时候特殊字符或然被转义

namespace Blog\Article;

 

复制代码 代码如下:

class Comment { }

例:

<?php

namespace BBS;

 

namespace Blog\Article;

class Comment { }

<?php
 

class name { }

Class Comt { }

namespace Blog\Article;

//作者是想调用Blog\Article\name
$class_name = __NAMESPACE__ . “\name”; //但是\n将被转义为换行符

//导入八个类
use Blog\Article\Comment;
$article_comment = new Comment();
//与当前空中的Comment产生争辨,程序发生致命错误

class Comment { }

$name = new $class_name(); //爆发致命错误

//为类应用别称
use Blog\Article\Comment as Comt;
$article_comment = new Comt();
//与眼下空中的Comt爆发冲突,程序爆发致命错误

namespace BBS;

?>

?>

class Comment { }

2. 不会以为是限量名称

动态调用
PHP提供了namespace关键字和__NAMESPACE__魔法常量动态的拜望成分,__NAMESPACE__能够通过结合字符串的情势来动态访谈:

Class Comt { }

PHP在编写翻译脚本的时候就明确了元素所在的空间,以及导入的景观。而在剖析脚本时字符串方式调用只可以以为是非限定名称和完全限定名称,而永久不容许是限量名称。

复制代码代码如下:

//导入五个类
use Blog\Article\Comment;
$article_comment = new Comment();
//与近期空中的Comment发生争执,程序产生致命错误

复制代码 代码如下:

<?php

//为类使用外号
use Blog\Article\Comment as Comt;
$article_comment = new Comt();
//与当下空间的Comt发生争辨,程序产生致命错误

<?php

 

?>

namespace Blog;

namespace Blog\Article;

动态调用
PHP提供了namespace关键字和__NAMESPACE__法力常量动态的拜见成分,__NAMESPACE__能够因而结合字符串的花样来动态访谈:

//导入Common类
use Blog\Article\Common;
//作者想行使非限定名称调用Blog\Article\Common
$common_class_name = ‘Common’;
//实际会被当作非限定名称,也就代表如今空中的Common类,但小编当下类没有创制Common类
$common = new $common_class_name(); //产生致命错误:Common类不设有

const PATH = ‘/Blog/article’;

 

//我想利用范围名称调用Blog\Article\Common
$common_class_name = ‘Article\Common’;
//实际会被当做完全限定名称,也就象征Article空间下的Common类,但小编上面只定义了Blog\Article空间并不是Article空间
$common = new $common_class_name();
//发生致命错误:Article\Common类不真实

class Comment { }

<?php
 

namespace Blog\Article;

//namespace关键字表示近期空间
echo namespace\PATH; ///Blog/article
$comment = new namespace\Comment();

namespace Blog\Article;

class Common { }

//法力常量__NAMESPACE__的值是时下空中名称
echo __NAMESPACE__; //Blog\Article
//能够组合成字符串并调用
$comment_class_name = __NAMESPACE__ . ‘\Comment’;
$comment = new $comment_class_name();

const PATH = ‘/Blog/article’;

?>

?>

class Comment { }

总结 自身对PHP的命名空间正好接触,也不可以小视给部分没有进行的提出。作者个人感到命名空间的功效和机能都很有力,借使要写插件大概通用库的时候再也不用忧郁重名难题。但是固然项目进行到一定水准,要经过扩展命名空间去消除重名难点,作者以为工作量不会比重构名字少。也只可以承认它的语法会对品种扩充一定的复杂度,因而从连串一伊始的时候就应该很好的统一筹算它,并制定一个命名典型。

字符串方式调用难题
上边包车型大巴动态调用的例证中,我们看看了字符串格局的动态调用格局,假若要使用这种方法要细心四个难题。

//namespace关键字表示这段日子空中
echo namespace\PATH; ///Blog/article
$comment = new namespace\Comment();

您可能感兴趣的小说:

  • PHP命名空间和电动加载类
  • PHP动态地成立属性和格局, 对象的复制,
    对象的相比,加载钦点的文本,自动加载类文件,命名空间
  • PHP面向对象程序设计之命名空间与机关加载类详解
  • PHP命名空间(namespace)的动态访谈及采用技能
  • PHP命名空间(namespace)的使用基础及示范
  • php面向对象全战略 (十七)
    自动加载类
  • php
    _autoload自动加载类与机制解析
  • PHP框架自动加载类文件原理详解
  • PHP命名空间与机关加载类详解

 

//法力常量__NAMESPACE__的值是当下空中名称
echo __NAMESPACE__; //Blog\Article
//能够组合成字符串并调用
$comment_class_name = __NAMESPACE__ . ‘\Comment’;
$comment = new $comment_class_name();

1. 利用双引号的时候特殊字符大概被转义

?>

复制代码代码如下:

字符串方式调用难题

<?php

上边的动态调用的例子中,大家看看了字符串方式的动态调用格局,借使要使用这种艺术要留意八个难点。

 

 

namespace Blog\Article;

  1. 行使双引号的时候特殊字符恐怕被转义

class name { }

 

//小编是想调用Blog\Article\name
$class_name = __NAMESPACE__ . “\name”; //但是\n将被转义为换行符

<?php
 

$name = new $class_name(); //产生致命错误

namespace Blog\Article;

?>

class name { }

2. 不会觉得是限量名称

//笔者是想调用Blog\Article\name
$class_name = __NAMESPACE__ . “\name”; //但是\n将被转义为换行符

 

$name = new $class_name(); //产生致命错误

PHP在编写翻译脚本的时候就分明了成分所在的半空中,以及导入的景色。而在条分缕析脚本时字符串方式调用只好以为是非限定名称和完全限定名称,而永世不容许是限制名称。

?>

复制代码代码如下:

  1. 不会感到是限量名称

<?php

 

 

PHP在编写翻译脚本的时候就分明了成分所在的上空,以及导入的动静。而在条分缕析脚本时字符串方式调用只好以为是非限定名称和完全限定名称,而永世不容许是限制名称。

namespace Blog;

 

//导入Common类
use Blog\Article\Common;
//小编想利用非限定名称调用Blog\Article\Common
$common_class_name = ‘Common’;
//实际会被当作非限定名称,也就象征如今空间的Common类,但本人眼下类未有开创Common类
$common = new $common_class_name(); //产生致命错误:Common类不设有

<?php
 

//作者想使用限制名称调用Blog\Article\Common
$common_class_name = ‘Article\Common’;
//实际会被视作完全限定名称,也就表示Article空间下的Common类,但本人上面只定义了Blog\Article空间而不是Article空间
$common = new $common_class_name();
//发生致命错误:Article\Common类不设有

namespace Blog;

namespace Blog\Article;

//导入Common类
use Blog\Article\Common;
//小编想利用非限定名称调用Blog\Article\Common
$common_class_name = ‘Common’;
//实际会被当作非限定名称,也就象征前段时间空间的Common类,但自己日前类未有开创Common类
$common = new $common_class_name(); //爆发致命错误:Common类不设有

class Common { }

//小编想选择限制名称调用Blog\Article\Common
$common_class_name = ‘Article\Common’;
//实际会被视作完全限定名称,也就意味着Article空间下的Common类,但自己上面只定义了Blog\Article空间实际不是Article空间
$common = new $common_class_name();
//爆发致命错误:Article\Common类不设有

?>

namespace Blog\Article;

总结 自己对PHP的命名空间正好接触,也不可以小视给部分并未有推行的提出。笔者个人认为命名空间的效能和遵守都很强劲,假如要写插件可能通用库的时候再也不用惦念重名难点。但是假使项目开展到一定水准,要由此扩充命名空间去化解重名难点,小编以为专业量不会比重构名字少。也只能承认它的语法会对品种扩充必然的复杂度,由此从项目一同首的时候就活该很好的安顿它,并创建叁个命名标准。

class Common { }

?>

总结
本身对PHP的命名空间正好接触,也不可以小看给一部分尚无实施的建议。笔者个人认为命名空间的功效和意义都很强大,假若要写插件也许通用库的时候再也不用担忧重名难点。但是假若项目开始展览到早晚程度,要透过扩展命名空间去化解重名难题,笔者觉着职业量不会比重构名字少。也只可以认可它的语法会对品种有增无减一定的复杂度,因而从项目一开首的时候就应有很好的宏图它,并制订一个命名规范。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website