thinkPHP5.0框架自动加载机制分析

本文实例讲述了thinkPHP5.0框架自动加载机制。分享给大家供大家参考,具体如下:

概述

ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载。

自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4。

自动加载

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

类库的自动加载检测顺序如下:

1、类库映射检测;
2、PSR-4自动加载检测;
3、PSR-0自动加载检测;

系统会按顺序检测,一旦检测生效的话,就会自动载入对应的类库文件。

类库映射

遵循我们上面的命名空间定义规范的话,基本上可以完成类库的自动加载了,但是如果定义了较多的命名空间的话,效率会有所下降,所以,我们可以给常用的类库定义类库映射。命名类库映射相当于给类文件定义了一个别名,效率会比命名空间定位更高效,例如:

Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php');
Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');

也可以利用addClassMap方法批量导入类库映射定义,例如:

$map = [
  'think\Log'   => LIB_PATH.'think\Log.php',
  'org\util\array'=> LIB_PATH.'org\util\Array.php'
];
Loader::addClassMap($map);

虽然通过类库映射的方式注册的类可以不强制要求对应命名空间目录,但是仍然建议遵循PSR-4规范定义类库和目录。

类库导入

如果你不需要系统的自动加载功能,又或者没有使用命名空间的话,那么也可以使用think\Loader类的import方法手动加载类库文件,例如:

Loader::import('org.util.array');
Loader::import('@.util.upload');

示例

// 引入 extends/qrcode.php
Loader::import('qrcode', EXTEND_PATH);
// 助手函数
import('qrcode', EXTEND_PATH);
// 引入 extends/wechat-sdk/wechat.class.php
Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
// 助手函数
import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');

类库导入也采用类似命名空间的概念(但不需要实际的命名空间支持),支持的“根命名空间”包括:

目录 说明
behavior 系统行为类库
think 核心基类库
traits 系统Traits类库
app 应用类库
@ 表示当前模块类库包

如果完全遵从系统的命名空间定义的话,一般来说无需手动加载类库文件,直接实例化即可。

Composer自动加载

5.0版本支持Composer安装的类库的自动加载,你可以直接按照Composer依赖库中的命名空间直接调用。

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

(0)

相关推荐

  • thinkPHP5.0框架安装教程

    本文实例讲述了thinkPHP5.0框架安装方法.分享给大家供大家参考,具体如下: ThinkPHP5的环境要求如下: PHP >= 5.4.0 PDO PHP Extension MBstring PHP Extension CURL PHP Extension 严格来说,ThinkPHP无需安装过程,这里所说的安装其实就是把ThinkPHP框架放入WEB运行环境(前提是你的WEB运行环境已经OK),可以通过两种方式获取和安装ThinkPHP. 一.下载ThinkPHP安装 获取ThinkPH

  • 浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别

    5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式: 主要改进如下: 增加路由变量规则: 增加组合变量支持: 增加资源路由: 增加路由分组: 增加闭包定义支持: 增加MISS路由定义: 支持URL路由规则反解析: 请求对象和响应对象 5.0新增了请求对象Request和响应对象Response,Request统一处理请求和获取请

  • thinkphp查询,3.X 5.0方法(亲试可行)

    一.介绍 ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取.更新和删除等操作,主要涉及到where方法等连贯操作即可,无论是采用什么数据库,你几乎采用一样的查询方法(个别数据库例如Mongo在表达式查询方面会有所差异),系统帮你解决了不同数据库的差异性,因此我们把框架的这一查询方式称之为查询语言.查询语言也是ThinkPHP框架的ORM亮点,让查询操作更加简单易懂.下面来一一讲解查询语言的内涵. 二.查询方式 ThinkPHP可以支持直接使用字符串作为查

  • ThinkPHP 3.2 版本升级了哪些内容

    前言 ThinkPHP 3.2 基于 ThinkPHP 3.1 的基础上有许多的变化,我觉得这个版本应该设立为 ThinkPHP 4.0 而不是什么 3.2.如果你在使用 ThinkPHP 3.1 请勿贸然迁移升级,这可不是简单的覆盖下文件就安然无恙的事情.   1. PHP 的版本 ThinkPHP 3.2 要求 PHP 5.3 以上的版本,而 ThinkPHP 3.1 只需要 PHP 5.2 就好了   2. 程序文件夹的修改 ThinkPHP 3.2 使用 Application 作为程序

  • thinkphp3.2.3版本的数据库增删改查实现代码

    框架thinkphp 版本:3.2.3 内容:数据库操作 1. 多表查找一条数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->find(); 2.查找一条数据 M('a表')->where('条件')->find(); 3.多表查询所有数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->select(); 4.查询

  • thinkPHP5.0框架自动加载机制分析

    本文实例讲述了thinkPHP5.0框架自动加载机制.分享给大家供大家参考,具体如下: 概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载. 自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4. 自动加载 由于新版ThinkPHP完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载. 类库的自动加载检测顺序如下:

  • Yii2框架类自动加载机制实例分析

    本文实例讲述了Yii2框架类自动加载机制.分享给大家供大家参考,具体如下: 在yii中,程序中需要使用到的类无需事先加载其类文件,在使用的时候才自动定位类文件位置并加载之,这么高效的运行方式得益于yii的类自动加载机制. Yii的类自动加载实际上使用的是PHP的类自动加载,所以先来看看PHP的类自动加载.在PHP中,当程序中使用的类未加载时,在报错之前会先调用魔术方法__autoload(),所以我们可以重写__autoload()方法,定义当一个类找不到的时候怎么去根据类名称找到对应的文件并加

  • PHP MVC框架中类的自动加载机制实例分析

    本文实例讲述了PHP MVC框架中类的自动加载机制.分享给大家供大家参考,具体如下: 原文 实现类的自动加载主要使用到了set_include_path和spl_autoload_register函数. set_include_path用于提前设置好可能会加载的类的路径. spl_autoload_register用于调用相关自动加载所需类的函数,实现自动载入的功能. 有一点要注意的是:自动加载在实例化类的时候执行,也就是说使用extends继承类的时候,是不会自动加载父类的. 设置目录如下:

  • PHP面向对象自动加载机制原理与用法分析

    本文实例讲述了PHP面向对象自动加载机制原理与用法.分享给大家供大家参考,具体如下: 在学习PHP的面向对象的时候,会知道很多"语法糖",也就是魔术方法.有一个加自动加载的魔术方法,叫:__autoload(); 先看一段代码 <?php function __autoload($classname) { $filename = "./". $classname .".php"; include_once($filename); } new

  • PHP进阶学习之类的自动加载机制原理分析

    本文实例讲述了PHP类的自动加载机制.分享给大家供大家参考,具体如下: 前言 我们在常见的PHP的主流框架中通常写好一个类只需写好相应的命名空间或直接实例化类就可以实现类的使用.而不需要使用原生的方式把类文件一个个用require.include引入包含进来,这归功于PHP的类自动加载机制,也是本文讨论的要点. 一.概念 在PHP代码中,不需要显式地使用文件路径将类库文件包含进来,便可使用该文件中定义的类库,这种技术称作自动加载. 在使用类或者定义了命名空间的类时,只需要直接实例化使用,PHP机

  • PHP类的自动加载机制实现方法分析

    本文实例讲述了PHP类的自动加载机制实现方法.分享给大家供大家参考,具体如下: Test1.class.php <?php class Test1 { public static function test() { echo "hello,world!\n"; } } Test2.class.php <?php class Test2 { public static function test() { echo "你好,世界!\n"; } } test.

  • thinkPHP5.0框架应用请求生命周期分析

    本文实例讲述了thinkPHP5.0框架应用请求生命周期.分享给大家供大家参考,具体如下: 本篇内容我们对ThinkPHP5.0的应用请求的生命周期做大致的介绍,以便于开发者了解整个执行流程. 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件.当然,你也可以更改或者增加新的入口文件. 通常入口文件的代码都比较简单,一个普通的入口文件代码如下: // 应用入口文件 // 定义项目路径 define('APP_PATH', __DIR__ . '/..

  • 说说PHP的autoLoad自动加载机制

    __autoload的使用方法1: 最经常使用的就是这种方法,根据类名,找出类文件,然后require_one 复制代码 代码如下: function __autoload($class_name) { $path = str_replace('_', '/', $class_name); require_once $path . '.php'; } // 这里会自动加载Http/File/Interface.php 文件 $a = new Http_File_Interface(); 这种方法

  • PHP命名空间与自动加载机制的基础介绍

    前言 include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 require 堆积.这样的代码既不优雅,执行效率也很低,而且维护起来也相当困难. 为了解决这个问题,部分框架会给出一个引入文件的配置清单,在对象初始化的时候把需要的文件引入.但这只是让代码变得更简洁了一些,引入的效果仍然是差强人意.PHP5 之后,随着 PHP 面向对象支持的完善,__autoloa

  • PHP autoload与spl_autoload自动加载机制的深入理解

    PHP autoload机制详解(1) autoload机制概述在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利.这 也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例 子: 复制代码 代码如下: /* Person.class.php */<?phpclass Person {var $name, $age;f

随机推荐