自动载入主要是省去了一个个类去 include 的繁琐,在 new 时动态的去检查并 include 相应的 class 文件。

先上代码:

//index.php
<?php class ClassAutoloader {
public static function loader($className)
{
$file = $className . ".class.php"; if(is_file($file))
{
echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n";
require_once( $file );
}
else
{
echo 'File ', $file, " is not found!\n";
}
} public static function register($autoLoader = '')
{
spl_autoload_register($autoLoader ?: array('ClassAutoloader', 'loader'), true, true);
}
} ClassAutoloader::register(); $obj = new printit();
$obj->doPrint(); ?>

然后是类文件:

//printit.class.php
<?php class PRINTIT { function doPrint() {
echo "Hello, it's PRINTIT! \n";
}
}
?>

实验结果:

$ php index.php
Try to load printit via ClassAutoloader::loader() Hello, it's PRINTIT!

上面的代码中,我们在另外一个文件 printit.class.php 中定义的 printit 类。但是,我们并没有在 index.php 中显性的 include 这个库文件。然后,因为我们有注册了自动加载方法,所以,我们在 new 这个类时,我们的自动加载方法就会按事先定义好的规则去找到类文件,并 include 这个文件。

这也是 ThinkPHP5.1 中 Loader 的基本原理。不过,ThinkPHP 框架中,另外还增加了使用 Psr0、Psr4 规则来查找类文件,以及 Composer 的自动加载。

PS,在官方文档的评论中,看到这样的神级代码:

<?php
spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register();
?>

让 PHP 自己去寻找文件,据说要比上面指定文件名要快得多。

该评论中举例,1000 classes (10个文件夹,每个有 10个子文件夹,每个文件夹有 10 个类)时候,上面指定文件名的方式耗时 50ms,而这两句代码只花了 10ms。

不过我猜,第一句让 PHP 已经做了缓存,所以,这种方式应该是拿内存换了速度。

PHP 实现自动加载的更多相关文章

  1. BPM配置故事之案例3-参与者与数据自动加载

    这才过了两天,阿海又来了. 阿海:公司决定改进管理方式,以后物资申请的申请人和申请部门要写具体使用人的名字和部门了. 小明:不是要让我改回去吧? 阿海:那太麻烦了,你能不能把申请人改成选择,选好人自动 ...

  2. Composer概述及其自动加载探秘

    composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具 ...

  3. 让Lua自己把文件夹下面的所有文件自动加载起来吧

    没有想到我也做了一回标题党.其实这里边说的自动还是有夸大其词的部分.其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已. 怎么来进行Lua文件的加载 一般情况下,相关的功能需要给他创建 ...

  4. 如何实现一个php框架系列文章【3】支持psr4的自动加载类

    psr4自动加载规范https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 我们把第三方使用psr规范的类库放在v ...

  5. PHP 自动加载规范PSR-4

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  6. 构建自己的PHP框架之自动加载类中详解spl_autoload_register()函数

    在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数.看下面例子: printit.c ...

  7. jquery 页面滚动到底部自动加载插件集合

    很多社交网站都使用无限滚动的翻页技术来提高用户体验,当你页面滑到列表底部时候无需点击就自动加载更多的内容.下面为你推荐 10 个 jQuery 的无限滚动的插件: 1. jQuery ScrollPa ...

  8. 自动加载dll,加载dll中程序集的信息。

    自动加载程序集,解析程序集中的方法. private static object Invoke(string lpFileName, string Namespace, string ClassNam ...

  9. 【PHP面向对象(OOP)编程入门教程】23.自动加载类 __autoload()函数

    很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在 ...

  10. autocad2008+C#2008开发中设置自动加载dll

    一.复制编译后的dlll路径,比如我的是D:\zjy\cad开发\学习\宗地图\bin\Debug\zd.dll 二.随便找个地方新建一个记事本,在记事本中写入以下内容: (command " ...

随机推荐

  1. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...

  2. 使用entitiy

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  3. scrapy Formrequest用法(豆瓣登录案例)

    # -*- coding: utf-8 -*-import scrapyfrom scrapy.http import Request,FormRequest class DbSpider(scrap ...

  4. Codeforces 948D Perfect Security 【01字典树】

    <题目链接> 题目大意: 给定两个长度为n的序列,可以改变第二个序列中数的顺序,使得两个序列相同位置的数异或之后得到的新序列的字典序最小. 解题分析: 用01字典树来解决异或最值问题.因为 ...

  5. Django之Form组件(一)

    Django之Form组件(一) Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本操作:字 ...

  6. vim编辑器第二天

    编辑模式的进入: i  :在光标所在的字符前插入 a :在光标所在的字符后插入 o :在光标所在的行的下面一行插入 I  : 在光标所在的行的行首插入,如果行首有空格则在空格后面开始插入 A :在光标 ...

  7. 安装mysql以及修改mysql字符集问题

    1.安装mysql sudo apt-get install mysql-server sudo apt-get install mysql-client   2.部分命令: sudo service ...

  8. 2019-1-9 c#时间格式

    DateTime now=DateTime.Now; //获取拼接形式的,精确到毫秒 now.ToString("yyyyMMddHHmmssfff"); //获取时间戳 自公元0 ...

  9. Android应用程序性能优化Tips

    对于我们设计的应用需要做到以下特征:build an app that's smooth, responsive(反应敏捷), and uses as little battery as possib ...

  10. redis(六)

    安装包 到中文官网查找客户端代码 联网安装 sudo pip install redis 使用源码安装 unzip redis-py-master.zip cd redis-py-master sud ...