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 相关文章推荐
TMDPHP 模板引擎使用教程
Mar 13 PHP
关于php循环跳出的问题
Jul 01 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
Parse正式发布开源PHP SDK
Aug 11 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
基于PHP实现的事件机制实例分析
Jun 18 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 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
一个程序下载的管理程序(四)
2006/10/09 PHP
PHP4.04简明安装
2006/10/09 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
python实现ip查询示例
2014/03/26 Python
python显示生日是星期几的方法
2015/05/27 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
python实现感知器
2017/12/19 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
高一新生军训感言
2014/03/02 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
清明节寄语2015
2015/03/23 职场文书
怎样写工作总结啊!
2019/06/18 职场文书