说明:
PHP实例化没有加载的类的,会自动调用__autoload();函数加载,可以通过__autolaod()函数来require类,解决很多类,多次require的问题,
可以通过spl的标准PHP 库函数Standard PHP Library (SPL) 的 autoload 的方法spl_autoload_register来注册自己的__autoload()函数。

实例化library/request.php里的Request类

输出:

以下来源于网络说明http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html

spl_autoload_register
(PHP 5 >= 5.1.2)

spl_autoload_register — 注册__autoload()函数
说明
bool spl_autoload_register ([ callback $autoload_function ] )
将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。
如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或
spl_autoload_call()。
参数
autoload_function
欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数
spl_autoload()。
返回值
如果成功则返回 TRUE,失败则返回 FALSE。
注:SPL是Standard PHP Library(标准PHP库)的缩写。它是PHP5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种Iterator接口或类。SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。
范例

设我们有一个类文件A.php,里面定义了一个名字为A的类:

view plaincopy to clipboardprint?
<?php  
class A  
{  
public function __construct()  
{  
echo 'Got it.';  
}  
}

然后我们有一个index.php需要用到这个类A,常规的写法就是

view plaincopy to clipboardprint?
<?php  
require('A.php');  
$a = new A();

但是有一个问题就是,假如我们的index.php需要包含的不只是类A,而是需要很多类,这样子就必须写很多行require语句,有时候也会让人觉得不爽。

不过在php5之后的版本,我们就不再需要这样做了。在php5中,试图使用尚未定义的类时会自动调用__autoload函数,所以我们可以通过编写__autoload函数来让php自动加载类,而不必写一个长长的包含文件列表。

例如在上面那个例子中,index.php可以这样写:

view plaincopy to clipboardprint?
<?php  
function __autoload($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}

$a = new A();

当然上面只是最简单的示范,__autoload只是去include_path寻找类文件并加载,我们可以根据自己的需要定义__autoload加载类的规则。

此外,假如我们不想自动加载的时候调用__autoload,而是调用我们自己的函数(或者类方法),我们可以使用spl_autoload_register来注册我们自己的autoload函数。它的函数原型如下:
bool spl_autoload_register ( [callback $autoload_function] )

我们继续改写上面那个例子:

view plaincopy to clipboardprint?
<?php  
function loader($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}

spl_autoload_register('loader');

$a = new A();

这样子也是可以正常运行的,这时候php在寻找类的时候就没有调用__autoload而是调用我们自己定义的函数loader了。同样的道理,下面这种写法也是可以的:

view plaincopy to clipboardprint?
<?php  
class Loader  
{  
public static function loadClass($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
}

spl_autoload_register(array('Loader', 'loadClass'));

$a = new A();

spl_autoload_register 注册自己的自动加载函数(__autoload())相关推荐

  1. php 自动加载函数,PHP自动加载的实例详解

    一个PHP项目,通常只有一个入口文件index.php,我们通常会在这个入口文件中写入自动加载函数,用来require以后会实例化的类文件.如:spl_autoload_register(functi ...

  2. php加载autoload,php自动加载类__autoload()的方法_PHP教程

    本文章来给大家简单的介绍一下关于php自动加载类__autoload()的方法,希望此方法对各位同学会有所帮助哦. 作用:当在程序中需要实例化一个类,刚好这这类又不是在本文件中,则需要用包含函数将外部 ...

  3. php 类自动执行方法,php类讲解8:PHP 自动加载类 __autoload() 方法

    __autoload() 在实际项目中,不可能把所有的类都写在一个 PHP 文件中,当在一个 PHP 文件中需要调用另一个文件中声明的类时,就需要通过 include 把这个文件引入.不过有的时候,在 ...

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

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

  5. php -- 魔术方法 之 自动加载:__autoload()

    自动加载类 背景: 很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件). 在 PHP 5 中,不再需 ...

  6. PHP自动加载类函数__autoload

    这个也不是新技术,不过还是有必要写下.在我们加类的时候,一般需要将类文件包含进来不管用include还是require.php提供了一个魔术方法__autoload(),可以自动加载,不过根据不同的开 ...

  7. php自动载入类文件函数,我可以在没有PHP的类中自动加载函数文件吗?

    说实话,我认为你不能以一种直截了当的方式.无论如何,使用实用程序类不是更好吗? OOP没什么,看看这个: class HTMLUtil { public static function filter( ...

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

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

  9. php的_autoload函数实现自动加载类的使用

    本文章详细的以实例来介绍了关于php _autoload自动加载类的用法以及如何使用_autoload来减少程序上的include和require的调用哦. 在使用PHP的OO模式开发系统时,通常大家 ...

最新文章

  1. 【Java】方法的重载 (求最大值方法的重载+求和的重载)
  2. 给VIM安装YouCompleteMe插件
  3. Django13-ModelForm中的is_valid及局部钩子、全局钩子源码解析
  4. IDEA svn 更换项目,拉新项目的时候 提示 No appropriate protocol
  5. Android service 中的stub类
  6. 结束SpringMVC
  7. 打包,VS 之 InstallShield Limited Edition for Visual Studio 2015 图文教程
  8. (转)详解Windows Hash
  9. python哪个版本好用-python用哪个版本好
  10. 输出星期名缩写python_python练习题5.1输出星期名缩写
  11. 【LeetCode - 247】中心对称数 II
  12. python系列3—顺序结构和分支结构
  13. 服务器空文件夹无法删除怎么办,为什么文件夹删不掉
  14. 新旧骗术揭秘:防止5G时代的电信诈骗
  15. TypeError this.getOptions is not a function 的解决
  16. 软件测试常见的开发模型
  17. 抽象类的作用是什么?
  18. linux系统设置密钥登录
  19. Java读取相片信息
  20. 单链表的头插法与尾插法详解

热门文章

  1. 计算机设备投标标书范本,OA办公自动化系统投标文件(标书范本)
  2. ktor框架用到了netty吗_Netty系列相关面试题汇总
  3. 如何在支付宝成为增加个人服务器,支付宝支付,服务器如何生成支付订单
  4. cass绘制围墙lisp_CASS中用LISP完成高程值的可视化处理
  5. @Repository详解
  6. python defaultdict 类属性_Python collections.defaultdict模块用法详解
  7. csgo 机器人模式_分享一个休闲模式机器人Bug
  8. 支持所有库的python手机编程-入坑 Python 后强烈推荐的一套工具库
  9. 20181016-10 每周例行报告
  10. 感谢党,软考过了。系统集成项目管理project师