PHP命名空间用法实例分析


Posted in PHP onSeptember 04, 2019

本文实例讲述了PHP命名空间用法。分享给大家供大家参考,具体如下:

在讲解命名空间之前,我们先了解一个问题。

我们在网站根目录创建一个文件夹,在文件夹中创建a.php

<?php
class Apple{
  function get_into(){
    echo "this is A";
  }
}

然后再创建一个b.php

<?php
class Apple{
  function get_into(){
    echo "this is B";
  }
}

再创建一个index.php,并且想要在index.php中同时使用a.php和b.php中的Apple类,所以我们用require_once进行引用

<?php
require_once "a.php";
require_once "b.php";

此时我们在浏览器中运行index.php,就会看到一行错误信息。Cannot redeclare class Apple,意思是我们不能重写Apple类。

而如果我们确实需要同时用到时,这时候就可以运用到命名空间解决这个问题。将a.php和b.php稍微更改:

a.php

<?php
namespace a\b\c;
class Apple{
  function get_into(){
    echo "this is A";
  }
}

b.php

<?php
namespace d\e\f;
class Apple{
  function get_into(){
    echo "this is A";
  }
}

这时我们重新刷新index.php,可以看到已经没有报错了,因为这两个Apple类在不同的命名空间中,不存在重写问题了。

我们分别实例化a.php和b.php中的两个类,分别调用其中的get_info方法。

<?php
require_once "a.php";
require_once "b.php";
$a = new \a\b\c\Apple();
$a->get_into();
$b = new \d\e\f\Apple();
$b->get_into();

PHP命名空间用法实例分析

刷新之后可以看到我们成功地调用了两个类中的方法。那么问题又来了,如果我们需要多次实例化这个类,岂不是每次都要一长串的命名空间?这样看起来代码十分臃肿。我们可以对代码再做修改。

<?php
require_once "a.php";
require_once "b.php";
use \a\b\c\Apple;
use d\e\f\Apple as Bapple;
$a = new Apple();
$a->get_into();
$b = new Bapple();
$b->get_into();

在代码中我们使用了use来使用命名空间,但是如果继续使用use \d\e\f\Apple显然和上面一行代码产生了冲突,我们可以使用as\d\e\f中的Apple设置一个别名,这个时候$b = new Bapple();就不会产生二义性了。

在浏览器中运行index.php,可以看到输出的结果就是我们预期的结果。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP.MVC的模板标签系统(一)
Sep 05 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
自编函数解决pathinfo()函数处理中文问题
Nov 03 PHP
php实现singleton()单例模式实例
Nov 06 PHP
浅析php创建者模式
Nov 25 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
PHP中FTP相关函数小结
Jul 15 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
Yii框架的布局文件实例分析
Sep 04 #PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 #PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 #PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 #PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 #PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 #PHP
解决Laravel blade模板转义html标签的问题
Sep 03 #PHP
You might like
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
vuejs如何配置less
2017/04/25 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
python计算最小优先级队列代码分享
2013/12/18 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
python中栈的原理及实现方法示例
2019/11/27 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
学校后勤岗位职责
2014/02/19 职场文书
班主任评语大全
2014/04/26 职场文书
罚站检讨书
2015/01/29 职场文书
董事会决议范本
2015/07/01 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android
Docker下安装Oracle19c
2022/04/13 Servers