为了初始化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();
?>
已有 0 条评论