15-2类的自动加载–PHP实战开发教程

15-2类的自动加载–PHP实战开发教程

常海舰相籍空彻踢首性藏究荒


类的自动加载
1.如果要在当前脚本中使用很多对象时,就不得不在头部使用require或include加载很多的类文件
2.为了避免这种情况,推荐使用类的自动加载器,用户在创建对象时,就不必关心当前类是否已导入
3.类的自动加载,使用了标准php函数库中的spl_autoload_register()函数来实现
4.sql_autoload_register(类名),多个类名请放在数组中


新建Demo1.php,Demo2.php,demo2.php

15-2类的自动加载–PHP实战开发教程第1张

Demo1.php:

<?php
class Demo1
{
    const CLASS_NAME=__CLASS__;//__CLASS__:类名
}

Demo2.php

<?php
class Demo2
{
    const CLASS_NAME=__CLASS__;//__CLASS__:类名
}

demo2.php

<?php
/**
 * 类的自动加载
 */
require "./class/Demo1.php";
require "./class/Demo2.php";

echo Demo1::CLASS_NAME;
echo "<hr>";
echo Demo2::CLASS_NAME;

执行:

15-2类的自动加载–PHP实战开发教程第2张


使用自动加载改写:

修改demo2.php

<?php
/**
 * 类的自动加载
 *
 * 1.类的自动加载,使用了标准php函数库中的spl_autoload_register()函数来实现
* 2.sql_autoload_register(类名),多个类名请放在数组中
 * */
function loader($className)
{
    require "./class/".$className.".php";
}

spl_autoload_register('loader');//将loder()函数注册到标准函数库中


echo Demo1::CLASS_NAME;
echo "<hr>";
echo Demo2::CLASS_NAME;

执行:

15-2类的自动加载–PHP实战开发教程第2张


使用匿名函数改写:

修改demo2.php

<?php
/**
 * 类的自动加载
 *
 * 1.类的自动加载,使用了标准php函数库中的spl_autoload_register()函数来实现
* 2.sql_autoload_register(类名),多个类名请放在数组中
 * */
spl_autoload_register(function($className){
    require "./class/".$className.".php";
});//将loder()函数注册到标准函数库中


echo Demo1::CLASS_NAME;
echo "<hr>";
echo Demo2::CLASS_NAME;

执行:

15-2类的自动加载–PHP实战开发教程第2张


更完善的版本:

demo2.php

<?php
/**
 * 类的自动加载
 *
 * 1.类的自动加载,使用了标准php函数库中的spl_autoload_register()函数来实现
* 2.sql_autoload_register(类名),多个类名请放在数组中
 * */
spl_autoload_register(function($className){
//    如果使用了命名空间需要将\替换为/
//    str_replace('\\','/',$className);
    $path=__DIR__."./class/".$className.".php";//获取文件的绝对路径
    if(file_exists($path) && is_file($path))//如果存在且是文件
    {
        require $path;
    }
});//将loder()函数注册到标准函数库中


echo Demo1::CLASS_NAME;
echo "<hr>";
echo Demo2::CLASS_NAME;

执行:

15-2类的自动加载–PHP实战开发教程第2张


咎顿摩挫耙伶狠邓扳滔鳖忙膝