为了初始化php中的类对象,需要通过一定的方法寻找到类的定义。通常情况下,类会定义在一个单独的文件中。

Autoload就是php找到这类文件的方法。

spl函数的使用->类载入基本流程

开始->当前文件找类->找到->初始化类

开始->当前文件找类->未找到->依次调用spl_autoload_register注册的方法找类->找到->初始化类

开始->当前文件找类->未找到->依次调用spl_autoload_register注册的方法找类->未找到->文件的autoload函数找类

//类文件放在lib文件夹下test.php,test.class.php

1.autoload01.php

<?php

define('CLASS_DIR', 'lib/');

set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR);//设置autoload寻找php定义的类文件的目录,多个目录用PATH_SEPARATOR进行分隔

//spl_autoload_extensions('.class.php');//

spl_autoload_extensions('.class.php,.php');//设置autoload寻找php定义的类文件的扩展名,多个扩展名用逗号分隔,前面的扩展名优先被匹配

spl_autoload_register();//提示php使用autoload机制进行查找自定义

$obj = new Test();

?>

2.autoload02.php

<?php

function autoload($class_name){//定义autoload函数,可以在不调用spl_autoload_register函数的情况下完成类的装载

echo "autoload class:".$class_name."<br>";

//require_once("lib/".$class_name.".php");

require_once("lib/".$class_name.".class.php");//装载类

}

//定义一个替换autoload函数的类文件装载函数

function classloader($class_name){

echo "classloader() load class: ".$class_name."<br>";

require_once("lib/".$class_name.".php");//装载类

}

spl_autoload_register('classloader');//传入定义好的装载类的函数的名称替换autoload函数

$obj = new Test();

?>

3.autoload03.php

<?php

//定义一个替换__autoload函数的类文件装载函数

function classloader($class_name){

echo "classloader() load class: ".$class_name."<br>";

set_include_path('lib/');

spl_autoload($class_name);//当我们不用require或者require_once载入类文件的时候,而想通过系统查找include_path来装载类时,必须显示调用sp_autoload函数,参数是类的名称来重启类文件自动查找(装载)

}

spl_autoload_register('classloader');//传入定义好的装载类的函数的名称替换__autoload函数

$obj = new Test();

?>