https://www.jb51.net/article/134372.htm

问题

传统上,在PHP里,当我们要用到一个class文件的时候,我们都得在文档头部require或者include一下:
<?php
require_once('../includes/functions.php');
require_once('../includes/database.php');
require_once('../includes/user.php');
...
但是一旦要调用的文档多了,就得每次都写一行,瞅着也不美观,有什么办法能让PHP文档自动加载呢?

方法:使用__autoload

<?php
function __autoload($class_name)
{require "./{$class_name}.php";
}
对,可以使用PHP的魔法函数__autoload(),上面的示例就是自动加载当前目录下的PHP文件。
当然,实际当中,我们更可能会这么来使用:<?php
function __autoload($class_name)
{$name = strtolower($class_name);$path = "../includes/{$name}.php";if(file_exists($path)){require_once($path);}else{die("the file {$class_name} could not be found");}
}__autoload存在的问题:做不到多个开发人员使用不同的自定义的autoloader,
除非大家都提前说好了,都使用一个__autoload,涉及到改动了就进行版本同步,这很麻烦。
__autoload函数马上要在7.2版本的PHP中弃用了。
取而代之的是一个叫spl_autoload_register()的东东,它的好处是可以自定义多个autoloader.

方法二:spl_autoload_register

如果需要多条 autoload 函数,spl_autoload_register() 满足了此类需求。
它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。
相比之下, __autoload() 只可以定义一次。
autoload_function
欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。
throw
此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。
prepend
如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
//使用一个全局函数
function Custom()
{require_once('...');
}
spl_autoload_register('Custom');//使用一个class当中的static方法
class MyCustomAutoloader
{static public function myLoader($class_name){require_once('...');    }
}
//传array进来,第一个是class名,第二个是方法名
spl_autoload_register(['MyCustomAutoloader','myLoader']);//甚至也可以用在实例化的object上
class MyCustomAutoloader
{public function myLoader($class_name){}
}
$object = new MyCustomAutoloader;
spl_autoload_register([$object,'myLoader']);使用autoload,无论是__autoload(),还是spl_autoload_register(),相比于require或include,
好处就是autoload机制是lazy loading,也即是并不是你一运行就给你调用所有的那些文件,而是只有你
用到了哪个,比如说new了哪个文件以后,才会通过autoload机制去加载相应文件。

总结

__autoload只可以定义一次,加载引用的函数直接写在__autoload(){}里面

spl_autoload_register可以定义多次,并且可以引用自定义的加载引用类的函数,相当与有一个加载函数的队列,而上面的函数只允许一个,不够灵活强大!

PHP的自动加载__autoload spl_autoload_register相关推荐

  1. PHP自动加载__autoload的工作机制

    PHP自动加载__autoload的工作机制 PHP的懒加载lazy loading 在 2011年11月12日 那天写的     已经有 4559 次阅读了 感谢 参考或原文 服务器君一共花费了11 ...

  2. php autoload用法,php自动加载__autoload()函数用法

    autoload在php主版本中是自动加载文件的一个方法了我们可以定义许多的文件在目录然后通过autoload加载了,下面来看看autoload函数用法. 在PHP5之后,我们可以通过 __autol ...

  3. PHP自动加载上——spl_autoload_register

    spl_autoload_register函数是实现自动加载未定义类功能的的重要方法,所谓的自动加载意思就是 我们的new 一个类的时候必须先include或者require的类文件,如果没有incl ...

  4. php自动加载机制的实现

    一.什么是自动加载 自动加载就是当我们在当前文件中实例化一个不存在的类时,调用自动加载机制引入相应的类文件. 注:自动加载有两种方式(都是php内置的),一种是通过__autoload(),另一种是通 ...

  5. Final关键字和类的自动加载

    Final关键字: 父类中的方法被声明为 final,则子类无法覆盖该方法.如果一个类被声明为 final,则不能被继承. 一般是为了防止父类的一个方法被重写.只能用来定义类和定义方法, 不能使用fi ...

  6. php之自动加载(懒加载)

    有A类和B类,如果在A类实例化B类,最简单直接的方法就是在B中使用include require_once A的文件,但是这种方法显然是不友好的,在框架中叶不是这么做的,在框架中使用的是自动加载的机制 ...

  7. PHP自动加载类—__autoload()和spl_autoload_register()

    test.php <?php function __autoload($class_name) { require_once $class_name . '.php'; } $obj = new ...

  8. spl_autoload_register 注册自己的自动加载函数(__autoload())

    说明: PHP实例化没有加载的类的,会自动调用__autoload();函数加载,可以通过__autolaod()函数来require类,解决很多类,多次require的问题, 可以通过spl的标准P ...

  9. php cli spl_autoload_register,PHP spl_autoload_register 自动加载方法浅析

    本节内容: PHP spl_autoload_register 自动加载 说明: spl_autoload_register()函数是主流框架使用最多的函数,也是非常核心的函数之一,可实现自动注册函数 ...

最新文章

  1. Spring Data JPA 常用注解
  2. MySQL DISTINCT:去重(过滤重复数据)
  3. Spring Boot 实战系列课程终于齐啦~
  4. 循环结构_for循环
  5. 专题突破三之并查集Ⅱ——星球大战,In Touch,方格染色,Junk-Mail Filter,关押罪犯,Silver Woods,Must Be Rectangular!
  6. [转载] c++与python 数据类型对应
  7. 数据库课程设计:某自来水公司收费管理系统(SQL Server)
  8. 有线电视与计算机网都是光缆吗,【有线电视论文】计算机管理有线电视光缆数据意义分析(共4443字)...
  9. JAVA 命令执行 学习笔记
  10. m3u8转换到mp4 python_python实现m3u8格式转换为mp4视频格式
  11. Tomcat配置数据库连接池
  12. 一个中关村IT男的房奴心路(转载)
  13. python数据分析——pandas
  14. 用python画哆啦a梦的头,用python画多来a梦-【Python】绘制哆啦A梦
  15. Python-接口自动化流程(pytest)
  16. .net开发过程中,错误集锦
  17. 常见CAD/CAM控件大全
  18. 赴台旅学前奏~台湾旅游知识普及篇
  19. 健身管理系统 健身房管理系统集成方案
  20. 大众软件:2010中国电脑游戏产业报告

热门文章

  1. Linux crontab的使用方式,sh脚本的编写,sh脚本自动启动tomcat服务器,sh监控系统运行情况
  2. struts,ognl,valuestack
  3. 为员工长工资。从最低工资调起每人长10%,请计算长工资的人数和长工资后的工资总额,并输出输出长工资人数及工资总额。
  4. Beautifulsoup 网页表格的解析
  5. 一种抑制undershoot/overshoot锐化算法介绍
  6. OpenCV—基本数据结构与示例
  7. 关于DEBUG的一点体会
  8. 从运维的角度理解Iaas、Paas、Saas云计算
  9. JDK5.0新特性系列---11.4线程 Condition
  10. 浅析Banner设计