道者编程


PHP命名空间

一:什么是命名空间,命名空间的作用是什么?

先看看官方的解释:

1:用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2:为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

解释比较抽象,我们用例子说明。

二:实例

两个文件:a.php;b.php,类和方法完全一样

a.php

<?php

class Test {
    function send(){
        echo 'My is A';
    }
}
b.php

<?php

class Test {
    function send(){
        echo 'My is B';
    }
}
再搞个文件,把两个加进去,随便命名:main.php

<?php
 require('a.php');
 require('b.php');

 $class = new Test();
 $class->send();
执行,发现报错:

Fatal error: Cannot declare class Test, because the name is already in use in E:\www\b.php on line 3

啥问题?这里提示重复了,那么怎么解决这个问题?这就是命名空间的目的。

用命名空间解决,修改上面的文件

命名空间就两个符号:namespace,use

a.php

<?php
namespace aaa\dog; //加命名空间 格式:\空间名\元素名(随便什么名字都行)
class Test {
    function send(){
        echo 'My is A';
    }
}
b.php

<?php
namespace bbb\dog;  //加命名空间 格式:\空间名\元素名(随便什么名字都行)
class Test {
    function send(){
        echo 'My is B';
    }
}
main.php

<?php
require('a.php');
require('b.php');
//通过命名空间调用类,如果类用了命名空间,又没有用use,那么new 后面第一个字符必须加 \ 反斜杠

$class = new \aaa\dog\Test(); // 调用a.php
$class->send();

$class = new \bbb\dog\Test(); // 调用b.php
$class->send();

这样就不会冲突了。这里就用到了namespace,namespace的作用是定义命名空间,那么use是干啥用的?继续介绍。

<?php

require('a.php');
require('b.php');

/* 
use 导入命名空间,use其实就是缩短命名空间,有些命名空间非常长
这里还可以设置一个别名,as 引用更简洁。
*/
use aaa\dog as a; // use最后一个dog,两个导入都是一样的,一样会冲突,加别名可以避免
use bbb\dog;

$class = new dog\Test(); //省略了前面的 aaa\,看起来也简洁了一点。
$class->send();

$class = new a\Test(); //直接取 as 的简称,更简洁
$class->send();


最新评论:
1楼 广东省深圳市 电信 发表于 2020-04-17 11:14:48
这是基础,但却是都要弄明白的东西
共有 1 条记录  首页 上一页 下一页 尾页 1
我要评论:

看不清楚


道知

about me

身体是革命的本钱,健身,养生,运动,公众号都有!

链接