类的自动加载
什么是类的自动加载?
类的自动加载是指:在其他的页面中,要想使用其他的类文件,并不需要去“引入”包含的类文件,程序会在需要一个类的时候自动去“动态加载”这个类。
什么情况下需要一个类?
- 创建一个对象的时候(实例化)
class A {
public $v = 10;
static $b = 20;
public function show(){
echo "我是show方法";
}
public static jingtai() {
echo "我是静态方法";
}
}
$obj = new A(); // 实例化A类
- 直接使用一个类名(操作静态或静态方法)
class A {
public $v = 10;
static $b = 20;
public function show(){
echo "我是show方法";
}
public static jingtai() {
echo "我是静态方法";
}
}
A::$b; // 调用静态变量
A::jingtai(); // 调用静态方法
实现自动加载类的方法
- 使用PHP提供的__autoload魔术函数
当程序需要一个类的时候就会去调用该函数。该函数需要我们自己去定义,写好加载类文件的通用语句。
/**
函数:__autoload
参数:$className 所需类名
**/
function __autoload($classsName) {
require "./class" . $className . ".class.php";
}
$obj = new A(); // A类会从当前目录下的class目录寻找A.class.php
- 使用PHP提供的spl_autoload_register函数
该函数作用:使用它来“注册”多个可以用来替代__autoload函数作用的函数。“注册”完后得去定义这些函数,并且这些函数作用跟__autolaod一样,不过这个函数可以从更多的文件夹下获取类文件。
/**
函数:spl_autoload_register
参数:自定义的函数名称("className")
**/
// 注册自动加载函数名
spl_autolaod_register('auto');
spl_autoload_register('load');
// 自定义注册函数
function auto($className){
$file = "./class" . $className . ".class.php";
if(file_exists($file)){
require './class' . $className . ".class.php";
}
}
function load($className){
$file = "./lib" . $className . ".class.php";
if(file_exists($file)){
require './lib' . $className . ".class.php";
}
}
// 当前页面没有加载该类时就会依次调用auto和load函数,直到找到该类文件并加载。