当程序的代码运行到需要加载某个类的时候,php内部机制可以做到自动加载该类文件。
1. __autoload($class)
__autoload尝试加载未定义的类 。
./class/A.class.php
<?php
class A{
function __construct(){
echo "<BR> A中的构造方法";
}
}
?>
./autoload.php
<?php
header("content-type:text/html;charset=utf-8");
function __autoload ($name){
echo "<br> __autoload::".$name;
$file = "./class/".$name.".class.php";
if(file_exists($file)){
require_once $file;
}
}
//创建A类对象,需要把A类加载进来
$a = new A();
?>
2.spl_autoload_register
spl_autoload_register — 注册给定的函数作为 __autoload 的实现 。
./class/A.class.php
<?php
class A{
function __construct(){
echo "<BR> A中的构造方法";
}
}
?>
./lib/B.class.php
<?php
class B{
function __construct(){
echo "<BR> B中的构造方法";
}
}
./autolaod.php
<?php
header("content-type:text/html;charset=utf-8");
function __autoload ($class){
echo "<br> __autoload::".$class;
$file = "./class/".$class.".class.php";
if(file_exists($file)){
require_once $file;
}
}
//注册给定的函数作为 __autoload 的实现
spl_autoload_register('my_autoload_1');
function my_autoload_1($class){
echo "<br> my_autoload_1::".$class;
$file = "./lib/".$class.".class.php";
if(file_exists($file)){
require_once $file;
}
}
//采用匿名函数的方式注册
spl_autoload_register(function($class){
echo "<br> 匿名函数自动加载::".$class;
$file = "./class/".$class.".class.php";
if(file_exists($file)){
require_once $file;
}
});
//创建A类对象,需要把A类加载进来
$a = new A();
class C extends B{};
$c = new C();
// my_autoload_1::D
// 匿名函数自动加载::D
// Fatal error: Class 'D' not found in C:\Apache24\htdocs\day16\auload.php on line 45
$d = new D();//依次寻找注册的自动加载方法,都失败了,报错!
?>