澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

详细介绍php中的命名空间,PHP中的命名空间相关

php命名空间的三个最分明的功能是减轻重名难题,PHP中分裂意多少个函数大概类现身同样的名字,不然会生出三个沉重的荒谬。上意气风发章节牵线了怎么样是php命名空间。php官方网站已很鲜明的开展了定义并形象解决释,这里一直从php官方网址copy意气风发段文字:从广义上的话,命名空间是黄金年代种包装事物的点子。在无数地点都足以看看这种抽象概念。比方,在操作系统中目录用来将相关文书分组,对于目录中的文件来讲,它就扮演了命名空间的角色。具体比方,文件 foo.txt 能够同期在目录/home/greg 和 /home/other 中存在,但在同一个目录中不可能存在多少个 foo.txt 文件。其它,在目录 /home/greg 外访谈 foo.txt 文件时,大家必得将引得名以至目录分隔符放在文书名早先获得/home/greg/foo.txt。那一个规律应用到程序设计领域正是命名空间的概念。

1. PHP中的命名空间是怎么着?

php5.3中namespace的注解,扶持初次接触namespace的phper飞速精晓,php5.3phper

命名空间多少个最显然的目标正是缓慢解决重名难点,PHP中分裂意多少个函数或然类现身同样的名字,不然会生出叁个沉重的大错特错。这种处境下就算防止命名重复就足以缓解,最何足为奇的豆蔻梢头种做法是预定二个前缀,可是方法名变的很短了,并且仍恐怕重名。为了幸免那大器晚成景观,启用命名空间,就算会大增一了好几使用麻烦度。

详细介绍php中的命名空间,PHP中的命名空间相关概念浅析_php手艺_脚本之家。文书档案copy了段:什么是命名空间?从广义上来讲,命名空间是风华正茂种包装事物的办法。在广大地点都得以观察这种抽象概念。举例,在操作系统中目录用来将相关文件分组,对于目录中的文件来讲,它就饰演了命名空间的剧中人物。具体比如,文件foo.txt 能够并且在目录/home/greg 和 /home/other 中留存,但在同贰个索引中不能够存在三个 foo.txt 文件。另外,在目录/home/greg 外访问 foo.txt 文件时,大家亟须将引得名以致目录分隔符放在文书名在此之前获得 /home/greg/foo.txt。这一个原理应用到程序设计领域正是命名空间的定义。

在PHP中,命名空间用来解决在编辑类库或应用程序时创建可选拔的代码如类或函数时遇见的两类标题:

  • 顾客编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  • 为相当短的标志符名称(日常是为了缓和第后生可畏类难点而定义的)创造一个小名(或简捷卡塔 尔(阿拉伯语:قطر‎的名称,升高源代码的可读性。

本文提到的常量:PHP5.3起首const关键字可以用在类的外界。const和define都以用来声称常量的(它们的不同不详述卡塔 尔(英语:State of Qatar),可是在命名空间里,define的法力是全局的,而const则效果于当下空间。小编在文中涉及的常量是支使用const表明的常量。

一向看例子稳步体会领会。

德姆o.php内容如下

 

namespace DemoNameSpace;

class Demo {
    private $mysqlHandle;

    public function __construct() {
        echo 'This is namespace of PHP demo ,The Demo magic constant "__NAMESPACE__" is '.__NAMESPACE__;
    }
}

  

index.php代码

 

   include 'Demo.php';
    use DemoNameSpaceDemo;
    $DemoObj = new Demo();

 

输出结果1:“This is namespace of PHP demo ,The 德姆o magic constant "__NAMESPACE__" is DemoNameSpace”

上述示例的印证:德姆o.php中有三个_NAMESPACE__魔法常量;“它含有当前命名空间名称的字符串。在全局的,不包涵在别的命名空间中的代码,它包蕴叁个空的字符串。”

进而做示例:

德姆o.php不做纠正,改正index.php文件,如下:

 

    include 'Demo.php';
    $Demo = new Demo();

 

输出结果2:“Fatal error: Class '德姆o' not found in F:JJserverdemoindex.php on line 4”

以此是大范围的“致命错误”新闻了。依据常规的php编制程序思路,这里的输出应该是跟“输出结果1”生机勃勃致的,但这边它偏要来个致命错误,那下要抓狂了啊?~

行,先把抓狂的麻烦解决,去掉(或注释掉卡塔尔德姆o.php文件中的:“namespace 德姆oNameSpace;”那几个讲话,就不奇怪了。那是大家平日写class以至调用class最多如牛毛的书写方式,就不再解释这种不利用namespace的情形了。

相比较使用namespace与不行使namespace的三种输出情形,并参与namespace的概念掌握后,上述出现致命错误的动静就很好通晓了。在德姆o.php中定义了七个namespace,也正是命名空间后,接着定义了德姆o类,然后那个德姆o类就被归总到了德姆oNameSpace命名空间中去了,那么要调用这些德姆o类时,自然要先调用那么些德姆oNameSpace命名空间了,相当于在index.php文件中采取“use德姆oNameSpaceDemo”语句了。

再看个复杂点的事例

德姆o.php文件代码

 

namespace DemoNameSpace;

class Demo {
    private $mysqlHandle;

    public function __construct() {
        echo 'This is namespace of PHP demo ,The Demo magic constant "__NAMESPACE__" is '.__NAMESPACE__;
    }
}

namespace DemoNameSpace1;

const constDefine = 'JJonline1';

class Demo {
    private $mysql;
    const constDefine = 'JJonline2';

    public function __construct() {
        echo 'The const constant outside class is: '.constDefine;
        echo '===cut-off rule of god!!!!===';
        echo 'The const constant inside class is: '.self::constDefine;
    }
}

 

  

 

index.php文件代码

 

    include 'Demo.php';
    use DemoNameSpace1Demo as Test;
    $Demo = new Test();
    echo '||||'.DemoNameSpace1constDefine;

 

出口结果3:“The const constant outside class is: JJonline1===cut-off rule of god!!!!===The const constant inside class is: JJonline2||||JJonline1”

本条结果在未曾命名空间的时候,就一贯报诸如“Fatal error: Cannot redeclare class 德姆o”的沉重错误了。但运营未有报错,这也正是php5.3今后引进的命名空间的补益了,就譬如本文早先引用的合法解释中以差异目录下的相符文件名的文书能够存在类似是三个道理了。德姆o.php文件中,定义的首先个称呼叫作Demo的class类被合并到了德姆oNameSpace的命名空间,而定义的第二个称呼叫作德姆o的class被归总到了DemoNameSpace1的命名空间,故而并不会产出不能够重新定义某三个类的浴血错误。以上的书写格局是要尽量幸免的,因为类外界const常量名与类内部const常量名是千篇少年老成律的,相当的轻便模糊,这里如此书写的指标就是看看不一样职分申明的const常量,在调用时的动静;输出结果3已经很鲜明了,就不再多墨迹解释了。

德姆o.php中德姆oNameSpace1命名空间下还将const常量constDefine提议,获得了定义class之外,那又要抓狂了,因为事先的知识是define定义全局常量,const定义class内部常量;那儿却将const拿出去玩了...具体就不再解说了,德姆o.php文件代码以至运维后的结果早已很醒指标标识了连带知识。class内部定义的const只可以在class的中间调用,选择self::constName方式,而class内部调用命名空间下、class外的const常量,则足以一贯动用诸如define定义的常量相似使用。当须求利用该命名空间下、class外定义的const常量时,就利用相通路径情势的措施调用(index.php文件中的输出卡塔尔国。

该例子还应该有有个别验证,正是在index.php中运用了use as语句,看index.php的代码,意义一览无余,new的三个class名为Test,但Test这一个类并从未在Demo.php中定义,却没有出错,那就在于了use as语句了,具体意思不再解释。

经过上述的垂询,namespace关键字能够将贯彻各样作用的class通过点名差异的命名空间分门别类贮存,并且不一样命名空间下的class能够同名;其余const常量定义也得以建议到class外部,当然也有功用范围如此一个“内涵”~

如今剧本文件的率先个命名空间前面不可能有别的代码,比如如下代码正是会报致命错误的:

 

define("GREETING","Hello world!");

namespace DemoNameSpace;

class Demo {
    private $mysqlHandle;

    public function __construct() {
        echo 'This is namespace of PHP demo ,The Demo magic constant "__NAMESPACE__" is '.__NAMESPACE__;
    }
}
$Demo = new Demo();

 

  

 

运维上述代码,会出现致命错误:“Fatal error: Namespace declaration statement has to be the very first statement in xxxx”

取名空间下间接new该命名空间中的class名称,能够省略掉use语法,那是php按脚本书写顺序实行招致的。比方如下代码是可以运营的

namespace DemoTest;
class Demo {
    public function __construct() {
        echo 'this is a test script';
    }
}
namespace DemoNameSpace;

class Demo {
    private $mysqlHandle;

    public function __construct() {
        echo 'This is namespace of PHP demo ,The Demo magic constant "__NAMESPACE__" is '.__NAMESPACE__;
    }
}
$Demo = new Demo();

运作结果4:“This is namespace of PHP demo ,The 德姆o magic constant "__NAMESPACE__" is DemoNameSpace”

以此结果申明,同后生可畏脚本下new几个从未钦命use哪个命名空间时,会顺着该脚本,使用最贴近new语句早先的三个命名空间中的class

 本文转发自晶晶的博客。。。。

命名空间七个最分明的目标便是缓慢解决重名难点,PHP中不允许多个函数...

php命名空间引进namespace关键字即使为了缓和php面向对象编制程序进程中已出现的各样“麻烦”;具体麻烦如下:

怎么着是命名空间?“从广义上来讲,命名空间是生龙活虎种包装事物的主意。在广大地点都足以见见这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来讲,它就饰演了命名空间的剧中人物。具体比如,文件 foo.txt 能够何况在目录/home/greg 和 /home/other 中存在,但在同八个索引中不可能存在三个 foo.txt 文件。此外,在目录 /home/greg 外访问 foo.txt 文件时,我们亟须将引得名以至目录分隔符放在文件名此前获得/home/greg/foo.txt。那一个原理应用到程序设计领域就是命名空间的定义。”——命名空间概述

  1. 客户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字矛盾。

  2. 为明白决麻烦1,常常编写种种class时会使用较长的类名或为完毕区别功能的class增加名称前缀(或后缀卡塔尔国。

  3. 不选择法力函数__autoload的图景下,而各样class又独自据有三个php文件时,为了调用差异的class,会在采取那么些class的别的的php文件的起来位置书写很多的include(或require或require_once)语句。

2. PHP命名空间该怎么样晓得?

作者们先创造命名空间,同意气风发脚本文件中得以创立三个命名空间。

从实质上讲,命名空间正是三个容器,这一个容器内大家得以放入类、函数和变量,他们在同一命名空间内能够无条件相互访问。在命名空间之外,就必需引用或然导入别的命名空间,本事调用它们含有的这一个项。

其代码如下所示:

命名空间跟shell中的文件目录的定义是近似同样的。在当前目录下得以一向用文件名访谈具备文件,如若急需拜望别的目录下的公文,就必要输入相对路径或相对路线。

<?php
//创建一个名为'Article'的命名空间
namespace Article;
//此Comment属于Article空间的元素
class Comment { }
//创建一个名为'MessageBoard'的命名空间
namespace MessageBoard;
//此Comment属于MessageBoard空间的元素
class Comment { }
?>

援用方式:复制代码 代码如下:namespace foo;class Foo { public function foo() { return topnamespacebarBar::fuck(); } }导入方式:复制代码 代码如下:namespace foo; use topnamespacebarBar; class Foo { public function foo() { return Bar::fuck(); } }

在不一样空间之间不能直接调用别的成分,必要选择命名空间的语法。

导入就也正是将目标类复制生机勃勃份到前段时间定名空间中。

其示例代码如下所示:

3. PHP命名空间有何实际利用?

<?php
namespace Article;
class Comment { }
namespace MessageBoard;
class Comment { }
//调用当前空间(MessageBoard)的Comment类
$comment = new Comment();
//调用Article空间的Comment类
$article_comment = new ArticleComment();
?>

澳门新浦京娱乐场网站,命名空间的存在是为着解决上面八个难点:

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

1卡塔 尔(英语:State of Qatar). 客商编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

而外类之外,对函数和常量的用法是平等的,下面我为四个空中创建了新的因素,并在MessageBoard空间中输出了它们的值。

2). 为不长的标记符名称成立叁个别称的名号,提升源代码的可读性。

其代码如下:

4. 一些tips

<?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_board
echo getCommentTotal(); //300
$comment = new Comment();
//调用Article空间的常量、函数和类
echo ArticlePATH; //article
echo ArticlegetCommentTotal(); //100
$article_comment = new ArticleComment();
?>
  1. 同一个上空下的类直接相互作用直接调用,归属一家。譬如 Laravel 中的 PageController 类中得以向来写 Page::all() 那样的代码来调用 Page 这些model,因为她俩俩都在顶尖命名空间下。

就收获如下的结果:/message_board300/article100

2. 若四个类存在于非拔尖命名空间中,那么它只好在调用相仿是当下定名空间下的别样类才不用“引用”或“导入”,它们归属一家。任何子命名空间都以另八个命名空间,另三个器皿,未有除了容器之间涉及之外的此外异样关系。

【相关学科推荐】

  1. Laravel 接受 classmap 格局展开自动加载,PHP纵然有了命名空间那一个高等本性,不过那只是逻辑关系,require 文件或然要有的。那个类和文书的附和关系就存在 /vendor/composer/autoload_classmap.php ,每趟 composer dump-autoload 都会重复编译、生成。

1. 《php.cn独孤九贱(4卡塔 尔(英语:State of Qatar)-php录像教程》

2.  录制教程:命名空间:咱们即便同名同性别,但却归属区别的时候空

  1.  php编制程序从入门到理解全套教程

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:详细介绍php中的命名空间,PHP中的命名空间相关