自动载入主要是省去了一个个类去 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. 20165235 祁瑛 2018-3 《Java程序设计》第四周学习总结

    20165235 祁瑛 2018-3 <Java程序设计>第四周学习总结 教材学习内容总结 第五单云总结 (一)子类与继承1.java中子类只能有一个父类,在类名前用extends标记.2 ...

  2. Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型

    Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型 cmds.ls() 的 flags 中没有指明 uvs 等这 ...

  3. JavaEE 之 Spring Data JPA

    1.事务 a.事务的关键属性(ACID) ①原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用 ②一致性(consistency):一旦所有事务动作完成,事务就被提交.也 ...

  4. HDU 1385 Minimum Transport Cost (输出字典序最小路径)【最短路】

    <题目链接> 题目大意:给你一张图,有n个点,每个点都有需要缴的税,两个直接相连点之间的道路也有需要花费的费用.现在进行多次询问,给定起点和终点,输出给定起点和终点之间最少花费是多少,并且 ...

  5. HDU6397

    HDU6397用小于n的m个数组成k,求方案数mod 998244353如果没有n的限制,直接用隔板法求就可以因为m个数中可以为0,所以不妨先都放上一个1,转化成不能为0的m个数来凑k+m,即C(k+ ...

  6. js获取http请求响应头信息

    var req = new XMLHttpRequest(); req.open('GET', document.location, false); req.send(null); var heade ...

  7. python实现链表(一)

    单链表结构简单,组成为节点 节点实现方法我们采用类进行封装 def __init__(self,item): self.item=item self.next=None 在这里我们实现对链表的操作时可 ...

  8. ORA-01000: maximum open cursors exceeded

    网上搜索了一下,找到了原因根源: 使用Oracle数据库的时候,经常会碰到有ORA-01000: maximum open cursors exceeded的错误.实际上,这个错误的原因,主要还是代码 ...

  9. GIL锁、进程池与线程池

    1.什么是GIL? 官方解释: ''' In CPython, the global interpreter lock, or GIL, is a mutex that prevents multip ...

  10. 虚拟主机的IIS连接数和访问流量限制各是什么

    网址:http://zhidao.baidu.com/question/40279863IIS连接数,就是你的网站同时允许多少个人连接你的网站.IIS连接数为100就是,同时允许100人连接你的网站, ...