php 函数__autoload与spl_autoload_register理解

理解自:http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html

__autoload的作用:当我们在一个页面使用其他文件的类方法时候,经常使用的是require ,require_once ,include,include_once,

比如我们有data.php 

<?php
class Data {
    public static function delData() {
        var_dump('del data');
    }
}

当我们想在person.php中使用data.php的内容时,可以这样

<?php
class Data {
public static function delData() {
var_dump('del data');
}

public static function catchData() {
echo '我就和你嘿嘿嘿';
}
}

但是,如果有100个界面时,我们还都要一个个的require_once进来吗?

__autoload的作用就出来,当我们调用一个从未定义的类时,就会加载__autoload方法,你可以使用__autoload方法加载文件

比如.

auto.php

<?php
function __autoload($className){
    $className = $className.'.php';
    if(is_file($className)){
        require_once "$className";
    }
}

person.php

<?php
require_once 'auto.php';
Data::delData();

那 spl_auto_register()有什么作用呢?

他可以加载自己写的函数来覆盖__autoload()函数

auto_register.php

<?php
function load($className){
    $fileName = $className.'.php';
    if(is_file($fileName)){
        require_once "$fileName";
    }
}
spl_autoload_register('load');

person.php

<?php
//require_once 'auto.php';
require_once 'spl_auto_register.php';
Data::delData();
Data::catchData();

输出

string

 'del data' (length=8)

我就和你嘿嘿嘿

原文地址:https://www.cnblogs.com/tumio/p/5401302.html