用户登录

在开发应用的时候,我们可能会用到第三方的框架,如果这些框架里面的类跟我们创建的类有重名的,就会发生冲突。

命名空间就是一种解决类的命名冲突的方法。在应用程序里面,我们不能使用两个重名的类。就像是在操作系统里,同一个目录下面,不能包含两个同名的文件一样 ..

命名空间就有点像是给类的名称,创建一个单独的目录,这样不同的目录下面是可以包含同名的文件的。不过我们并不是去为类创建真正的目录,而是使用 namespace 这个关键词,为类去定义一串字符 ... 用它作为类的命令空间 ...

下面,我们先再去创建一个 php 文件,FlowPlayer.php .. 在这个文件里,假设有一个类 ... 这个类跟我们之前在 Player.php 文件里定义的类是一个名字 ... 就是 Player ...

class Player
{
public function start() {
return 'FlowPlayer 正在播放...';
}
}

回到 index.php ... 先去掉这个自动加载类文件的 Autoload.php ... 然后手工去包含 Player.php 还有 FlowPlayer.php 包含进来 ...

require 'Player.php';
require 'FlowPlayer.php';

回到浏览器 ... 这里提示说 Fatal error: Cannot redeclare class Player ... 不能重复定义 Player 这个类 ... 下面,我们去解决一下这个问题 ...

分别去给 Player.php 还有 FlowPlayer.php 添加一个命名空间 ...

打开 Player.php ... 在文件的顶部 ... 输入 namespace ... 接着是命名空间 ... 比如 Ninghao ... 后面加上反斜线 ... 可以继续去定义 ... App ...

namespace Ninghao\App;

再打开 Flowplayer.php ... 给它也添加一个命名空间 .. namespace ... Flowplayer ... 这里我们只用一个词作为它的命名空间 ...

回到浏览器 ... 刷新 ... 错误就会不见了 ... 因为我们使用了命名空间 ... 所以 Player.php 还有 Flowplayer.php 里面定义的类就不会有冲突了 ...

再打开 index.php ...

现在,如果我们想要创建这两个类的实例 ... 需要指定这个命名空间 ... 比如去创建 Player.php 里面的 Player 这个类的实例 ... my_player 等于 ... new ... 这个类的命名空间是 Ninghao 反斜线 ... App ... 然后再一个反斜线 ... 再加上这个类的名称 ... Player ...

再去调用这个对象的 start 方法 ... 下面,再去创建一个 Flowplayer.php 里面的 Player 对象的实例 ... my_flowplayer 等于 new ... 它的命名空间是 Flowplayer ... 反斜线 ... 加上类的名称 ... Player ...

同样再去调用这个对象的 start 方法 ..

$my_player = new Ninghao\App\Player();
echo $my_player->start();

$my_flowplayer = new Flowplayer\Player();
echo $my_flowplayer->start();

保存 ... 回到浏览器 ...

一切都工作正常 ...

命名空间 - namespace《 PHP 面向对象 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点