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

本文实例讲述了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基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

(0)

相关推荐

  • 详细解读php的命名空间(一)

    php的命名空间功能已经出来很久了,但是一直以来没怎么深究过,这次赶着有时间所以特意翻着手册做一个整理和总结帮助自己完善完善,原本准备一篇写完,但发现内容其实还是蛮多的,放一起太长看着累,所以分两篇博客要好些. 一:命名空间概念:命名空间是一种封装事物的方法,类似于目录和文件. 命名空间解决的问题(手册上也写的很清楚,下面按照自己的理解简化了): 1:解决程序编写者自己写的类.常量.函数和php内部的或者第三方的出现名称冲突的情况. 2:创建别名,帮助解决类.常量.函数名称过长的情况,帮助提高代

  • PHP命名空间与自动加载类详解

    本文实例讲述了PHP命名空间与自动加载类.分享给大家供大家参考,具体如下: 今天我要给大家介绍的是PHP的命名空间 和 自动加载类 我先简单的分开演示 在放在一起 大家请看: 什么是自动加载类? 想必大家都应该知道__autoload 这个魔术方法 $db = new DB(); function __autoload($className) { echo $className; exit(); //在这个里面引用类 } 在运用这个类只能加载一次 ,在很多时候我们要引入的不止一个类这个时候怎么办

  • 实例讲解PHP中使用命名空间

    让我给你一个类的简单例子: <?php namespace Dojo; class Ninja { } 在上面的示例中,我们在Dojo命名空间中创建了一个名为Ninja的新类.如果我们没有使用命名空间,并且我们的应用程序中包含了另一个名为Ninja的类,那么我们将得到一个错误,说明我们不能重新声明类. 那么命名空间就可以解决这个问题.我们可以创建另一个类,像这样: <?php namespace Training; class Ninja { } 现在,如果我们将这两个文件都包含在应用程序中,

  • PHP命名空间namespace定义及导入use用法详解

    本文实例讲述了PHP命名空间namespace定义及导入use用法.分享给大家供大家参考,具体如下: 在PHP中,出现同名函数或是同名类是不被允许的.为防止编程人员在项目中定义的类名或函数名出现重复冲突,在PHP5.3中引入了命名空间这一概念. 1.命名空间,即将代码划分成不同空间,不同空间的类名相互独立,互不冲突.一个php文件中可以存在多个命名空间,第一个命名空间前不能有任何代码.内容空间声明后的代码便属于这个命名空间,例如: <?php echo 111; //由于namespace前有代

  • 详细解读php的命名空间(二)

    一:命名空间里的namespace关键字和__NAMESPACE__常量的运用 PHP支持两种抽象的访问当前命名空间内部元素的方法,__NAMESPACE__ 魔术常量和namespace关键字. 常量__NAMESPACE__会储存当前命名空间的名字字符串,如果当前是全局非命名空间,则保存的是空字符串. 关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素.它等价于类中的 self 操作符.如果不在当前是全局环境的话,那么显式访问的就是全局限定的元素. __NAMESPA

  • PHP命名空间简单用法示例

    本文实例讲述了PHP命名空间简单用法.分享给大家供大家参考,具体如下: 有三个文件,分别是space1.php,space2.php,use.php吧,在同一目录里. space1.php: <?php namespace MyNamespace\Factory; class Employees{ private $name; function __construct($nameStr){ $this->name = $nameStr; } function getName(){ return

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

    本文实例讲述了PHP命名空间namespace及use的简单用法.分享给大家供大家参考,具体如下: 最近一段时间在研究php框架,一直想的什么时候才能开发出自己的框架,当然这是为了提升自己的编程水平,同时能把平时学的零散的东西糅合在一块熟练应用.但是开发一个框架根本不知道如何做起,先开发什么,虽然php的框架也不少,但是都是如何应用,没有文档和视频可以学习,这是让我特别郁闷的事情,相信不少想自己开发框架玩的小伙伴都有类似的感受,郁闷归郁闷,自己还是动手做了,做的时候困难和想象的一样难,从一开始就

  • Thinkphp5.0 框架Model模型简单用法分析

    本文实例讲述了Thinkphp5.0 框架Model模型简单用法.分享给大家供大家参考,具体如下: 新建user模型User.php: <?php namespace app\index\model; use think\Model; class User extends Model{ } 控制器代码: //方式一,使用User模型, $res = \app\index\model\User::get(1); $data = $res->toArray(); dump($data); //方式

  • Python迭代器定义与简单用法分析

    本文实例讲述了Python迭代器定义与简单用法.分享给大家供大家参考,具体如下: 一.什么是迭代器 迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样).迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束. [注意]:迭代器只能前进不能后退 [迭代器的优点]: 使用迭代器不要求事先准备好整个迭代过程中的所有元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之

  • PHP中opcode缓存简单用法分析

    本文实例讲述了PHP中opcode缓存简单用法.分享给大家供大家参考,具体如下: 1.什么是opcode 解释器分析代码之后,生成可以直接运行的中间代码,就称做操作码,opcode 2.解释器与编译器的区别 解释器是生成了中间代码后直接运行中间代码,运行时的控制权还是在解释器手里. 编译器则是生成了中间代码之后还进一步优化代码,生成可以直接运行的目标程序 ,但不执行,等待用户触发执行,他的控制权在目标程序,和编译器无关. 3.php是解释型语言,他的原理与编译有点相似,包括词法分析,语法分析,语

  • AngularJs中$cookies简单用法分析

    本文实例讲述了AngularJs中$cookies简单用法.分享给大家供大家参考,具体如下: 首先导入angular-cookies.js 在App 中require模块ngCookies: angular.module("app",['ngCookies']); 使用格式:$cookies.变量名 = 变量值 不能使用: $cookies.变量名 = { 变量名1: 变量值, 变量名2: 变量名, ............. } 因为这样使用:$cookies.变量名.变量名1的方式

  • Yii框架函数简单用法分析

    本文实例讲述了Yii框架函数简单用法.分享给大家供大家参考,具体如下: 1.redict return $this->redirect(['login']); redict其实是对于以下的封装  等同于 $response=Yii::app->response(); $response->headers->add('location','www.baidu.com'); 2.save 第一个参数是执行验证,第二个参数是指的那个字段(空的话 就保存全部) 如果是一个两个的话  必须知

  • CI框架网页缓存简单用法分析

    本文实例讲述了CI框架网页缓存简单用法.分享给大家供大家参考,具体如下: CodeIgniter 可以让你通过缓存页面来达到更好的性能. 尽管 CodeIgniter 已经相当高效了,但是网页中的动态内容.主机的内存 CPU 和数据库读取速度等因素直接影响了网页的加载速度. 依靠网页缓存, 你的网页可以达到近乎静态网页的加载速度,因为程序的输出结果 已经保存下来了. 缓存是如何工作的? 可以针对到每个独立的页面进行缓存,并且你可以设置每个页面缓存的更新时间. 当页面第一次加载时,缓存将被写入到

  • Node.js console控制台简单用法分析

    本文实例讲述了Node.js console控制台简单用法.分享给大家供大家参考,具体如下: 在Node.js官方文档 https://nodejs.org/api/console.html 中描述了控制台的所有API方法. Class: Console  - new Console(stdout[, stderr])  - console.assert(value[, message][, ...])  - console.dir(obj[, options])  - console.erro

随机推荐