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 危险函数全解析
Sep 09 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 PHP
php获取linux命令结果的实例
Mar 13 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
Oct 21 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通过文件流方式复制文件的方法
2015/03/13 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
wxPython中文教程入门实例
2014/06/09 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
NumPy中的维度Axis详解
2019/11/26 Python
安全资料员岗位职责
2013/12/14 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python