admin 发表于 2020-7-1 23:13:25

php中命名空间(namespace)的作用和使用

1.命名空间的作用:

在PHP中函数、类、常量是不允许同名的。为了解决这三者的同名问题,所以出现了命名空间. 其实不仅仅是php,其他语言也有类似的使用。比如JavaScript中:



我们来详细的讲解一下PHP中的命名空间:

语法:namespac_e 空间名\空间名;

说明: 用于定义空间名;如果一个php文件中,第一个空间的定义义必须放在第1行。如果所要定义的空间已存在,则是进入空间。代码示例如下:

----------------------------------------------------------------------------

<php

namespoc_e AA;
functio_n showInfo(){
    echo __METHOD__,'<br/>';
}
showinfo();

namespoc_e AA\BB;

functio_n showInfo(){
    echo __METHOD__,'<br/>';
}
//showInfo();
----------------------------------------------------------------------------
2.空间成员:所谓空间成员就是,空间所影响的,空间只影响类、函数、常量(const)

3.空间成员的访问:访问方式分为限定,非限定,完全访问,之间的区别,我们使用代码来说明一下。

----------------------------------------------------------------------------

<php
namespoc_e AA\BB;
functio_n showInfo(){
    echo __METHOD__,'<br/>';
}
namespoc_e CC;
functio_n showInfo(){
    echo __METHOD__,'<br/>';
}
namespoc_e AA;
functio_n showInfo(){
    echo __METHOD__,'<br/>';
}
//非限定访问:用于访问当前空间中的成员
showInfo();
//限定访问:只能访问当前所在的空间的子空间中的成员
BB\showInfo();
//完全限定:可以访问其它所有的空间的成员
\CC\showInfo();
↑根空间标识符
----------------------------------------------------------------------------
但是在实际的使用中,我们很多类和方法都是在不同的文件中,这就涉及到引入的问题,也就是在实际开发中,我们经常会在一个文件中引入另一个php文件。这种情况下有两种情况:

当前文件有空间的定义,被引入的文件中没有空间的定义,但是有空间成员。被引入的空间成员会被放在公共空间(根空间)

代码示例如下:

----------------------------------------------------------------------------


04inc.php
<php

namespoc_e Core;
include '05ou.php';
new \AdminController();
showInfo();

echo P;
//根空间中的成员,只要类的访问必须加‘/’
----------------------------------------------------------------------------

05ou.php
<php
const P=5;

functio_n showinfo(){
    echo __METHOD__,'<br/>';
}

clas_s AdminController{
    public functio_n __construct(){
      echo __METHOD__,'<br/>';
    }
}

第二种情况:当前文件有空间的定义,被引入的文件中有空间的定义,并不会中断当前空间的定义。
----------------------------------------------------------------------------
04inc.php
<php

namespoc_e Core;
include '05ou.php';
functio_n showinfo(){
    echo __METHOD__,'<br/>';
}

new \Controller\AdminController;
----------------------------------------------------------------------------
05ou.php
<php
namespoc_e Controller;

clas_s AdminController{
      public functio_n __construct(){
                echo __METHOD__,'<br/>';
    }
}
----------------------------------------------------------------------------

4.引入空间成员:

1.use 空间名\空间名 【as 别名】:将指定空间引入到当前空间。同可以使用as关键字为被引入的空间起个别名。

----------------------------------------------------------------------------

04inc.php
<php
namespoc_e Core;
use Admin\Controller as con;

include '05ou.php';

new con\AdminController();
----------------------------------------------------------------------------
05ou.php
<php
namespoc_e Admin\Controller;

clas_s AdminController{
    public functio_n __construct(){
      echo __METHOD__,'<br/>';
    }
}
----------------------------------------------------------------------------
2.use 空间名\空间名\成员类 【as 别名】:将指定的空间中的成员引入到当前空间,引入空间成员只能引入类。

----------------------------------------------------------------------------

04inc.php
<php
//引入空间成员类

namespoc_e Core;
use Admin\Controller\AdminController;
include '05ou.php';

new AdminController();
----------------------------------------------------------------------------
05ou.php
<php
namespoc_e Admin\Controller;

clas_s AdminController{
    public functio_n __construct(){
      echo __METHOD__,'<br/>';
    }
}
----------------------------------------------------------------------------
5.空间命名的方式:空间名我们可以任意的定义,但是如果命名更有意义呢。一般我们会以类文件所在的文件夹为空间名。其实主要的就是方便按照某种约定成俗的规则加载文件。


这里我们只是简单的介绍了一下命名空间的作用和使用。其实很多框架内部也是这样的使用。不同的类在不同的空间,相互之间的引用也是遵循着相应引入规则。






页: [1]
查看完整版本: php中命名空间(namespace)的作用和使用