Thinkphp3.2学习——架构_命名空间

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 文件。

注意:和3.1不同,我们无需在实例化命名空间定义的类之前导入类库文件了。


根命名空间

根命名空间是一个关键的概念,以上面的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.1版本以上的话,允许设置对应用类库不使用命名空间,你在配置文件中进行如下设置:

‘APP_USE_NAMESPACE‘    =>    false,

那么,所有的应用类库不再需要使用命名空间定义,但继承和调用核心类和系统类的时候,仍然需要使用命名空间,例如:

class UserModel extends \Think\Model {
}
  1. 特别注意:如果你需要在3.2版本中实例化PHP内置的类库或者第三方的没有使用命名空间定义的类,需要采用下面的方式:
    $class =    new \stdClass();
    $sxml  =    new \SimpleXmlElement($xmlstr);
时间: 2024-11-07 12:48:55

Thinkphp3.2学习——架构_命名空间的相关文章

ThinkPHP3.2学习——架构_CBD模式

ThinkPHP从3.0版本开始引入了全新的CBD(核心Core+行为Behavior+驱动Driver)架构模式,因为从底层开始,框架就采用核心+行为+驱动的架构体系,核心保留了最关键的部分,并在重要位置设置了标签用以标记,其他功能都采用行为扩展和驱动的方式组合,开发人员可以根据自己的需要,对某个标签位置进行行为扩展或者替换,就可以方便的定制框架底层,也可以在应用层添加自己的标签位置和添加应用行为.而标签位置类似于AOP概念中的"切面",行为都是围绕这个"切面"来

物联网架构_对AWS的Greengrass的认识与理解

物联网架构_对AWS的Greengrass的认识与理解 一,前言: 这段时间有许多的收获,分析,还有总结,其中包括新系统的设计与开发,以及其中新技术的踩坑等等等. 但是最近真的很忙,项目的推进,面试工作等,尤其五月份还有考试.所以,赶紧趁着五一假期有些空暇,先发一些东西.之后,有机会再对自己的素材(周报,技术总结什么的),做一些整理,再发出来哈. 这篇文章,主要是在之前项目架构设计时,了解了现有的一些项目,其中就有AWS的Greengrass项目,这里简单介绍一下自己的认识. 物联网方面的介绍可

十五、Android学习笔记_授权过程

1.需要申请App Key和App Secret.不同的开发平台有不同的接入方式,可以参考文档,然后将这两个值放进去. 2.通过OAuth类实现认证,它会自动跳转到认证界面,进行授权,成功之后需要处理回调接口. 3.在第二步调用回调接口时,它会返回用户的基本信息,比如用户id.此时需要将用户id信息保存起来,为后面登录做准备.回调接口的写法就为myapp://AuthorizeActivity,其中scheme全部为小写字母. <activity android:name="com.wei

九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

c#学习6,命名空间

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using 命名空间.ir;//如果使用的类不在一个namespace,添加using引用//同一个文件可以不一样的namespacenamespace 命名空间{class Program { static void Main(string[] args) { // Convert.

thinkphp学习笔记8—命名空间

原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间的路径和类库文件的目录一致,就可以实现类的自动加载,例如Org\Util\File类的定义为 namespace Org\Util; class File { } 其所在的路径是ThinkPHP/Library/Org/Util/File.class.php,我们实例化该类写法如下: $class

[Prodinner项目]学习分享_第四部分(完结篇)_Controller层(控制器)

Controller作用: 数据从数据库查询出来后,通过一定的业务逻辑,筛选出来一个结果集,我们最终的目的是要将这个结果集在页面中显示的. Controller就是起到这个作用,将业务逻辑层的结果集调出来,然后通过Model,或者Json的方式返回到View(页面)里. 1.我们需要创建一个Conroller,继承封装好的BaseController. 2.将之前写好的PersonService实例化. 3.获取结果集. -PersonService里有CrudService封装好的,增删改查常

Unity3d_学习笔记_入门

转自:http://blog.csdn.net/zlfxy/article/details/8722437 本文内容来自“编程教父”的视频课程. 1.Unity3d一个游戏引擎,可以用来开发很多游戏. 要利用Unity3d开发游戏,我们首先要下载一个Unity3d软件.下载后,下载一个破解补丁,这样就可以正常进行开发了. 2.Unity3d每次只能开启一个工程项目. (1)Unity3d中比较重要的一个对象就是摄像机了,摄像机就相当于我们人的眼睛,有了摄像机,运行程序后,才能够有视野. (2)U

zookeeper学习(零)_安装与启动

zookeeper学习(零)_安装与启动 最近换了新的电脑,终于买了梦寐以求的macbook.最近也换了新的公司,公司技术栈用到了zookeeper.当然自己也要安装学习下.省的渣渣的我,被鄙视就麻烦了.本篇文章只介绍如何安装,先安装上之后,再进行具体学习. 安装 本文使用brew 进行安装,默默说一句,mac的系统是比win好用.没有安装brew和jdk的童鞋请先安装这2个. 打开终端执行命令 brew install zookeeper 启动执行 zkServer start 执行zk连接