PHP 自动加载

2020-06-18  本文已影响0人  JJNile

PHP7 有两种自动加载方式:__autoloadspl_autoload_register()

__autoload

已经于 7.2 废弃,不在阐述

spl_autoload_register

spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool

composer 的自动加载原理就是通过 spl_autoload_register() 实现的

优势:

  1. 可以按需多次注册加载函数,__aotuload 由于是全局函数只能定义一次,不够灵活
  2. 可以设置优先级
  3. 可以被catch到错误,__aotuload 不能
  4. 注册的加载函数可以按需被 spl_autoload_unregister

简单实现

classes/A.php


class A
{
    public function __construct()
    {
        echo "1\n";
    }
    public function aa()
    {
        echo "aa\n";
    }
    public static function bb()
    {
        echo "bb\n";
    }
}

autoload.php

spl_autoload_register(function($class) {
    require 'classes/'.$class.'.php';
});

$a = new A();
$a->aa();
$a::bb();

/* 输出结果:
1
aa
bb
*/
上一篇 下一篇

猜你喜欢

热点阅读