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 相关文章推荐
Mysql的常用命令
Oct 09 PHP
用libtemplate实现静态网页生成
Oct 09 PHP
精通php的十大要点(上)
Feb 04 PHP
PHP daddslashes 使用方法介绍
Oct 26 PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 PHP
全面解读PHP的人气开发框架Laravel
Oct 15 PHP
PHP随机数 C扩展随机数
May 04 PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 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
php 无极分类(递归)实现代码
2010/01/05 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
php实现webservice实例
2014/11/06 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
javascript document.referrer 用法
2009/04/30 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
2012/11/15 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
浅谈Python 对象内存占用
2016/07/15 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
巴黎一票通:The Paris Pass
2018/02/10 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
餐饮业会计岗位职责
2013/12/19 职场文书
书香校园活动方案
2014/02/28 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
个人德育工作总结
2015/03/05 职场文书
市级三好生竞选稿
2015/11/21 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers