关闭

thinkphp命名空间

361人阅读 评论(0) 收藏 举报
分类:

3.2版本全面采用命名空间方式定义和加载类库文件,有效的解决多个模块之间的冲突问题,并且实现了更加高效的类库自动加载机制。

命名空间的概念必须了解,否则会成为学习3.2版本开发的重大障碍。 
如果不清楚什么是命名空间,可以参考PHP手册:PHP命名空间

由于新版完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载。 例如,Org\Util\File类的定义为:

namespace Org\Util;
class File {
}

其所在的路径是 ThinkPHP/Library/Org/Util/File.class.php,因此,如果我们实例化该类的话:

$class = new \Org\Util\File();

系统会自动加载 ThinkPHP/Library/Org/Util/File.class.php 文件。

根命名空间

根命名空间是一个关键的概念,以上面的Org\Util\File类为例,Org就是一个根命名空间,其对应的初始命名空间目录就是系统的类库目录(ThinkPHP/Library),Library目录下面的子目录会自动识别为根命名空间,这些命名空间无需注册即可使用。

例如,我们在Library目录下面新增一个My根命名空间目录,然后定义一个Test类如下:

namespace My;
class Test {
    public function sayHello(){
        echo 'hello';
    }
}

Test类保存在 ThinkPHP/Library/My/Test.class.php,我们就可以直接实例化和调用:

$Test = new \My\Test();
$Test->sayHello();

模块中的类库命名空间的根都是以模块名命名,例如:

namespace Home\Model;
class UserModel extends \Think\Model {
}

其类文件位于 Application/Home/Model/UserModel.class.php

namespace Admin\Event;
class UserEvent {
}

其类文件位于 Application/Admin/Event/UserEvent.class.php

特别注意:如果你需要在3.2版本中实例化PHP内置的类库或者第三方的没有使用命名空间定义的类,需要采用下面的方式:

// 必须从根命名空间调用系统内置的类库或者第三方没有使用命名空间的类库
$class =    new \stdClass();
$sxml  =    new \SimpleXmlElement($xmlstr);
0
0
查看评论

Thinkphp命名空间的调用

今天碰到一个关于命名空间的错误,在这里总结一下 (1)命名空间是什么? NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使...
  • echoerror
  • echoerror
  • 2016-07-07 00:20
  • 1321

初用thinkphp框架,对命名空间不了解,下面这篇文章讲的很清楚

PHP的命名空间 2013-05-14 10:06 by 轩脉刃, 14479 阅读, 10 评论, 收藏, 编辑 PHP的命名空间(namespace)是php5.3之后才有的。这个概念在C#中已经很早就有了,php中的nam...
  • lua_denis_2014
  • lua_denis_2014
  • 2015-04-26 16:34
  • 1254

Thinkphp源码分析-命名空间自动加载

一.命名空间自动加载 (PHP 5 >= 5.3.0, PHP 7) 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。 具体举个例子,文件...
  • suitingwei
  • suitingwei
  • 2016-01-24 21:25
  • 1566

ThinkPHP里的命名空间解析

由于PHP语法里不支持函数重载机制,如果一个应用里有两个同名的方法,怎么办呢?在Yii 框架为了避免名字重复引起问题,全部的类前边都有 C 字样,而在ThinkPHP里就引入了命名空间这个概念。a) 命名空间是虚拟的定义空间,不是真实存在目录 b) 命名空间的分隔符都是反斜杠 \ c) ...
  • yexudengzhidao
  • yexudengzhidao
  • 2017-02-10 15:13
  • 671

thinkphp3.2.3 命名空间

命名空间: 1、autoload自动加载类(命名空间)$class,写入static $_map(第一次) 2、判断是否符合命名空间格式  2.1 若为命名空间则通过字符串处理取出其根命名空间 2.1.1 若其根命名空间属于ThinkPhP/Library/ 下已有目录或自己创建的...
  • wanderstarrysky
  • wanderstarrysky
  • 2015-12-16 20:28
  • 440

解决在ThinkPHP控制器中命名空间的问题

前几天在TP中,使用PHP自带类,因为命名空间,遇到一个小问题。因为ThinkPHP中使用了命名空间,如果在Home命名空间下,直接执行如下代码 $datetime= new DateTime($basedate, new DateTimeZone($timezone)); 那么其等同如 $...
  • hsd2012
  • hsd2012
  • 2016-06-22 10:20
  • 2228

thinkphp5——公共命名空间的使用方法

?php namespace bengjing;//命名空间 header("content-type:text/html;charset=utf-8"); class Animal{ public $obj ='d...
  • iheyu
  • iheyu
  • 2017-11-20 20:15
  • 156

thinkPHP3.2.3实现自定义类的自动加载

实现类的自动加载有两种方式: 1.新建一个配置文件为 也可以自己命名,如果自己命名的话要在config.php中加入配置文件加载的语句: 'LOAD_EXT_CONFIG' => 'xxx', 然后在里面设置具体的映射: return ...
  • u014520745
  • u014520745
  • 2016-07-24 14:07
  • 2396

PHP中的use、命名空间、引入类文件、自动加载类的理解

use只是使用了命名空间, 但是要想调用类,必须要加载类文件,或者自动加载。即便是引入了其中一个类,如果没有自动加载机制,还是会报错use的几种用法namespace Blog\Article; class Comment { }//创建一个BBS空间(我有打算开个论坛) namespace ...
  • p763833631
  • p763833631
  • 2017-02-14 11:15
  • 2307

Thinkphp 提供ajax方法 ajaxReturn 方法

Thinkphp系统的\Think\Controller类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端。并且支持JSON、JSONP、XML和EVAL四种方式给客户端接受数据,并且支持配置其他方式的数据格式返回。默认配置采用JSON格式返回数据。可通过配置DEFAULT_AJAX...
  • u011341352
  • u011341352
  • 2015-10-08 15:44
  • 1654
    个人资料
    • 访问:94914次
    • 积分:1323
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:83篇
    • 译文:0篇
    • 评论:3条
    最新评论