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 Zip解压 文件在线解压缩的函数代码
May 26 PHP
PHP设计模式之责任链模式的深入解析
Jun 13 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
javascript实现数独解法
2015/03/14 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
Python实现的数据结构与算法之链表详解
2015/04/22 Python
Python数据类型学习笔记
2016/01/13 Python
Django框架验证码用法实例分析
2019/05/10 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
在python中做正态性检验示例
2019/12/09 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
荷兰超市:DEEN
2018/03/14 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
小学教师师德反思
2014/02/03 职场文书
小学国庆节活动方案
2014/02/11 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
植树造林的宣传标语
2014/06/23 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
承租经营合作者协议书
2014/10/01 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
如何使用CocosCreator对象池
2021/04/14 Javascript
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers