PHP的namespace命名空间和use操作符讲解与用法

首先参照php手册上讲解的:

在PHP中,命名空间用来解决两类问题:
  • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突

  • 为很长的标识符名称创建一个别名(或简短)的名称,提高源代码的可读性。

  • PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。


我们先写一个demo:

新建a.php

class Dog{
    function say()
    {
        echo 'this is a dog';
    }
}

新建b.php

class Dog{
    function say()
    {
        echo 'this is b dog';
    }
}

然后新建入口文件index.php

<?php   
require("a.php");
require("b.php");
say();

由于当前a.php和b.php都存在相同的类名Dog,请求index.php会提示:
Fatal error: Cannot declare class Dog, because the name is already in use in D:\www\a\b.php on line 3

对于名字冲突,我们使用namespace改造a.php和b.php
修改a.php,添加

namespace a\b\c;
class Dog{
    function say()
    {
        echo 'this is a dog.';
    }
}

新建b.php

namespace c\d\e;
class Dog{
    function say()
    {
        echo 'this is b dog.';
    }
}

然后运行index.php文件。没有报错;
我们修改index.php,实例化a.php的Dog类:

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

$a = new a\b\c\Dog();
$a->say();
$b = new c\d\e\Dog();
$b->say();

返回: this is a dog. this is b dog.
说明实例化a.php的Dog类成功。
接下来我们使用use操作符来使得代码更加简单易懂:

//使用use操作符,声明类命名空间
use a\b\c\Dog;
require("a.php");
require("b.php");
//原始
$a = new a\b\c\Dog();
$a->say();
//修改后
$a = new Dog();
$a->say();
   

现在就可以简化实例化命名空间。
注意的是,use操作符声明类的时候,命名空间加类名。

现在还有一个问题,如果我们给a.php和b.php都引入的命名空间申明:

use a\b\c\Dog;
use c\d\e\Dog;    

那么运行程序,又会报类重名异常。
这里我们就要使用use命名空间别名设置:

use a\b\c\Dog
use c\d\e\Dog as Dog2

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

$a = new Dog();
$a->say();

$b = new Dog2();
$b->say();   

现在程序就能正常运行了。

总结:

参照PSR-4规范:类的命名空间一般使用文件路径。或参照项目结构来设计。层级的命名空间在多个外部类的实例化和自动加载方面确实做到了规范化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,683评论 0 17
  • 把当前目录作为Root Document只需要这条命令即可:php -S localhost:3300 也可以指定...
    绚烂的时光阅读 751评论 0 1
  • ​ 作为以饮食文化文明于世界的中国人,若是连八大菜系都讲不利索,也实在有些丢人。 鲁、川、粤、闽、苏、浙、湘、皖,...
    芬克阅读 1,623评论 1 11
  • 春虫本逍遥, 但愁细雨绵。 未见青山老, 难与共年少。
    打酱油的张某某阅读 183评论 0 0