PHP命名空间namespace及use的简单用法分析


Posted in PHP onAugust 03, 2018

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

最近一段时间在研究php框架,一直想的什么时候才能开发出自己的框架,当然这是为了提升自己的编程水平,同时能把平时学的零散的东西糅合在一块熟练应用。但是开发一个框架根本不知道如何做起,先开发什么,虽然php的框架也不少,但是都是如何应用,没有文档和视频可以学习,这是让我特别郁闷的事情,相信不少想自己开发框架玩的小伙伴都有类似的感受,郁闷归郁闷,自己还是动手做了,做的时候困难和想象的一样难,从一开始就有点蒙了。

那就是命名空间的使用及use引入。看了很多网上的说法,也看了官方文档,意思大概明白,也很好理解,命名空间还好说,给这个空间起个名字嘛,但是use具体操作起来就不行 了,怎么也搞不通。后来看一个yii学习视频才恍然明白。

比方说建三个文件。

第一个文件 A.php,里边有两个类,命名空间是 a\b\c;

<?php
namespace a\b\c;
class Apply{
  function get_info(){
    echo 'this is A Apply';
  }
}
class C{
  function info(){
    echo 'this is info';
  }
}

第二个文件 B.php  命名空间 a\b\d;

<?php
namespace a\b\d;
class Apply{
  function get_info(){
    echo 'this is B Apply';
  }
}

第三个文件 index.php ,用来使用上边两个文件的类。

比方说我们现在想实例化A.php里的类,该怎么实现呢?

首先要包含这个文件

require_once('A.php');

然后 use a\b\c;? 还是a\b\c\A?   起初我也是这么认为的。其实这是错的,use应该是这样的,命名空间\这个空间下你要实例化类的类名。比方说我们要实例化 A.php里的Apply类,那么 use a\b\c\Apply;  这就相当于引入这个类,接下来再  new Apply();调用里边的方法,跟平常是一样的。如果要实例化类C,就 use a\b\c\C;

注意:use不等于require_once或者include,use的前提是已经把文件包含进当前文件

顺便提一句,在MVC模式中,类名和文件名是相同的,所以use的时候会让不了解的人以为use后面跟的是文件名,我之前就这么以为的。其实use的还是类名。

有的人可能问了,那我不同的命名空间下,有相同的类名,在同一个文件中使用怎么办?比方说我们上边的index.php,把A.php和B.php都包含进来,然后new Apply();这个时候是会报错的,解决方案就是起别名,比方说 use a\b\d\Apply as b;  此时我们new 的时候不应该写成 new Apply();而是new b();这样就不会发生冲突了。

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

PHP 相关文章推荐
用PHP制作的意见反馈表源码
Mar 11 PHP
在普通HTTP上安全地传输密码
Jul 21 PHP
thinkphp 多表 事务详解
Jun 17 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
PHP count()函数讲解
Feb 03 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
PHP后台实现微信小程序登录
Aug 03 #PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 #PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 #PHP
lnmp安装多版本PHP共存的方法详解
Aug 02 #PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 #PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 #PHP
PHP实现的分解质因数操作示例
Aug 01 #PHP
You might like
php ajax数据传输和响应方法
2018/08/21 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python Requests安装与简单运用
2016/04/07 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
学习python需要有编程基础吗
2020/06/02 Python
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
工作交流会欢迎词
2014/01/12 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
学校元旦晚会方案
2014/02/19 职场文书
生产厂长岗位职责
2014/02/21 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
小学思品教学反思
2016/02/20 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
各国货币符号大全
2022/02/17 杂记
Redis批量生成数据的实现
2022/06/05 Redis
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis