php笔记 - 命名空间和use的使用

1 PHP命名空间 - namespace

1.1 概念和使用

PHP 命名空间namespace是为了解决重名问题,PHP中不允许两个函数或者类出现相同的名字。

1.2 定义命名空间

命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。

<?php  
// 定义代码在 'MyProject' 命名空间中  
namespace MyProject;  
// ... code ...  

第一个命名空间前不允许有任何代码,否则,会报错:

Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script in ……
1.3 定义子命名空间

与目录和文件的关系很像,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义

<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
// …code…
?>
1.4 调用namespace
\userCenter\login; //绝对调用
userCenter\login; //相对调用
use userCenter\login; //引用空间
use userCenter\login as regName;//引用空间+别名

1.5 例子

1.5.1 举例 - 同一个文件下多个命名空间
<?php 

namespace projectA;

class project{
    public function printTest(){
        echo "project - A - test";
        echo "</Br>";
    }
}

namespace projectB;

class project{
    public function printTest(){
        echo "project - B - test";
        echo "</Br>";
    }
}

//在 projectB的命名空间下实例化的对象是 projectB 空间下的对象
$project1 = new project();
$project1 -> printTest();

// 调用projectA 目录下的 project 对象的方法
$project2 = new \projectA\project();
$project2 -> printTest();

// 创建子空间
namespace projectB\childSpace;

在这里插入图片描述

1.5.2 举例 - 命名空间在重名类中的应用

注意 new类时,带上命名空间时,之间一定用反斜杠字符,而不是顺斜杠。

有以下目录结构,两个目录文件下都存在一个IndexDao的类,并包含一个入口文件。

即:使用了一种像文件路径的语法: \空间名\元素名

在这里插入图片描述

入口文件index.php的代码如下:

<?php 

error_reporting(0); 
include_once("../namespace/testOne/indexDao.php");
include_once("../namespace/testTwo/indexDao.php");

$indexDao = new \TEST\ONE\dao\IndexDAO();
$indexDaoTwo = new TEST\Two\dao\IndexDAO();
$indexDao->test();  
$indexDaoTwo->test();

运行结果如下:

在这里插入图片描述

注意 : 在这种应用中,除了使用命名空间区别类,还要使用include_once完成物理文件上的引用。

2 PHP - use 关键字的使用

2.1 概念与使用

use: 简单说就是起别名,引入namespace 后导致一个类完整的名称可能会特别长。

2.2 举例 - use 和 namespace的配合使用

入口文件 index.php的代码如下

<?php 

error_reporting(0); 
include_once("../namespace/testOne/indexDao.php");
include_once("../namespace/testTwo/indexDao.php");

use TEST\ONE\dao as indexDaoOne;
use TEST\Two\dao as indexDaoTwo;

$indexDao = new indexDaoOne\IndexDAO();
$indexDaoTwo = new indexDaoTwo\IndexDAO();
$indexDao->test();  
$indexDaoTwo->test();
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值