7.4 类的自动加载

当两个 class 类分别对应两个脚本文件的时候,双方都不能在自己的文件中随意的调用另一个类,需要通过 include 或是 require 引入后才实例化。

但如果一个脚本文件中引入了太多的脚本之后,又会显得有点笨重了。

因此PHP提供了类的自动加载技术,原理是当你在实例化的时候,如果没有前置引入,那么本来PHP会立即报错并同时提示找不到这个 class 类的,但现在提供了一个机会,它会在当前环境中查找你是否有对spl_autoload_register等函数进行过处理,如果有的话,先将类名等信息丢过去看看,如果成功处理了这个错误的话,则相安无事,否则就报错。

// 类的自动加载
spl_autoload_register(function($className){
    // 路径分隔符,也就是 /
    $opt = DIRECTORY_SEPARATOR;
    // 完整路径
    $path = __DIR__.$opt.'vendor'.$opt.'demo'.$opt.strtolower($className).".class.php";
    // 输出路径
    echo "<p>$path</p>";
    // 引入文件
    require_once($path);
});

// 实例化
$date = new Date();
// 打印属性
var_dump($date);

// 实例化
$math = new Math();
// 打印属性
var_dump($math);

spl_autoload_register() 函数的参数是一个回调函数,在这个回调函数中能获得 你未经引用而直接调用的类名,再根据这个类名找到它对应的路径,使用require引入,就能解决类名找不到的异常错误了。

更多相关内容可以查看官方提供的 SPL 标准库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这...
    四月不见阅读 4,709评论 0 0
  • 自动加载函数--__autoload() 在Yii中有spl_autoload_register() 这个自动加载...
    洞房花猪阅读 4,935评论 0 1
  • 一 预定义接口 1.1 遍历 Traversable(遍历)接口 检测一个类是否可以被foreach遍历,该接口不...
    coderhu阅读 4,948评论 0 0
  • 说说PHP的autoLoad(http://www.cnblogs.com/yjf512/archive/2012...
    古则阅读 3,251评论 0 1
  • Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象...
    廖马儿阅读 6,666评论 2 38