php 加载函数 __autoload(), spl_autoload_register()

来自: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的类:

<?php

class A   {  
   public function __construct()   {

echo ‘Got it.‘;

}  
}

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

<?php

require(‘A.php‘);  
  $a = new A();

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

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

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

<?php

function __autoload($class) {

$file = $class . ‘.php‘;

if (file_exists($file)) {

require_once($file);

}

}

$a = new A();

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

此外,假如我们不想自动加载的时候调用__autoload,而是调用我们自己的函数(或者类方法),

我们可以使用spl_autoload_register来注册我们自己的autoload函数.

它的函数原型如下: bool spl_autoload_register ( [callback $autoload_function] )

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

<?php

function loader($class) {

$file = $class . ‘.php‘;

if (file_exists($file)) {

require_once($file);

}

}

spl_autoload_register(‘loader‘);

$a = new A();

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

同样的道理,下面这种写法也是可以的:

<?php

class Loader   {  
   public static function loadClass($class)   {

$file = $class . ‘.php‘;

if (file_exists($file)) {

require_once($file);

}

}  
}  
spl_autoload_register(array(‘Loader‘, ‘loadClass‘));  
$a = new A();

php 加载函数 __autoload(), spl_autoload_register()

时间: 2024-08-12 09:35:15

php 加载函数 __autoload(), spl_autoload_register()的相关文章

php 自动加载函数、自动加载方法、自动加载类

在PHP开发过程中,如果希望从 外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来.这个在小规模开发的时候,没什么大问 题.但在大型的开发项目中,这么做会产生大量的require或者include方法调用,这样不因降低效率,而且使得代码难以维护,况且 require_once的代价很大. 在PHP5之前,各个PHP框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历 目录,自动加载所有符合约定规则的文件的类或函数. 当然,PHP

9)添加自动加载函数

注意:我把之前的控制器文件名都加了C,不然,那个自动记载函数,我不会写 目录雏形: 我开始把自动加载类放在index.php代码的最下面,然后就报了这个错误: 因为我把代码中只要是类加载的地方,全部都注释了,所以,所以他报了--------Controller这个类没加载到,哎 气死我了,然后我发现,那个自动加载函数根本没进去,因为我加了这行代码,根本没有输出出来: 后面,我才发现,原来这个index.php代码在前面的第11行发现了错误,那么后面可定就不运行了啊,哎,真是敲得代码少,这样的问题

lua加载函数require和dofile

Lua提供高级的require函数来加载运行库.粗略的说require和dofile完成同样的功能但有两点不同: 1. require会搜索目录加载文件 2. require会判断是否文件已经加载避免重复加载同一文件. 由于上述特征,require在Lua中是加载库的更好的函数. require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表.require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法.更明确地说,每一个

js页面加载函数

在未加载完文档,使用jquery选择器选择元素后,如果立即绑定事件进行调用,会引起js的报错(can not read property of undefined),导致事件不能绑定成功. alert($("p")[1].firstChild.nodeValue); 这时就需要js的页面加载函数 一般有三种 window.onload = function(){ $("p").bind("click", function() { $(this).

高阶函数 - 惰性加载函数

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>高阶函数 - 惰性加载函数</title> </head> <body> <div style="width: 100px; height: 100px; background: #f60;" id=&quo

js和jquery页面初始化加载函数的方法及先后顺序

原文:js和jquery页面初始化加载函数的方法及先后顺序 运行下面代码.弹出A.B.C.D.E的顺序:A=B=C>D=E. jquery:等待页面加载完数据,以及页面部分元素(不包括图片.视频), js:是页面全部加载完成才执行初始化加载. <!DOCTYPE html> <html> <head> <title>首页</title> <script type="text/javascript" src=&quo

_autoload 自动加载类和spl_autoload_register()函数

一._autoload 自动加载类:当我们实例化一个未定义的类时,就会触此函数.到了php7.1以后版本不支持此函数好像抛弃了 新建一个类文件名字自己随便去:news类在auto.php文件里面去实例news类而没有引入该类,可以用_autoload自动加载方法类去处理. news.class.php文件 class news{ function do_new() { echo 'aaa'; } } auto.php文件使用_autoload函数要定义函数体自己去定义 function __au

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

很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把 这个文件引入.不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,是一个很让人头疼的事,所以我们能不能在用到什么类的时 候,再把这个类所在的php文件导入呢?这就是我们这里我们要

__autoload() 类文件自动加载函数

这个魔术方法是用来自动加载程序所用到类文件的PHP源文件,这样就避免了我们一个一个自动去require或者include了,这个函数会在试图使用尚未被定义的类时自动调用.通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类,但是我最近看过一篇文章,上面说__autoload()的效率不是很高.以下是示例代码: 1 <?php 2 功能:在当前页使用类时自动加载该类的文件 3 参数$className 为类的名称 可自定义 4 5 */ 6 7 function __auto