PHP spl_autoload_register()函数使用

和 spl_autoload_register函数相关的另一个函数是__autoload();
__autoload()是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数。

看下面例子: 
新建文件Printer.class.php
<?php
class Printer {
  function doPrint() {
    echo 'hello world';
  }
}
?>

再建文件 index.php
<?php
function __autoload( $class ) {
$file = $class . '.class.php';
if ( is_file($file) ) {
return require_once($file);
}
}
$obj = new Printer();
$obj->doPrint();
?>

运行index.php后正常输出hello world。在index.php中,由于没有包含Printer.class.php,在实例化Printer时,自动调用__autoload函数,参数$class的值即为类名Printer,此时Printer.class.php就被引进来了。 
在面向对象中这种方法经常使用,可以避免书写过多的引用文件,同时也使整个系统更加灵活。 

再看spl_autoload_register(),这个函数与__autoload有与曲同工之妙,看个简单的例子: 
class VLoader{

    public static function loader($class){
        $file = $class . '.class.php';
        if(is_file($file)){
            echo 'VLoader::loader<br />';
            return require_once($file);
        }
    }
}

//spl_autoload_register(array('VLoader','loader')); //第一种调用方法,数组调用方法
spl_autoload_register('VLoader::loader');  //第二种调用方法,静态调用方法

$p = new Printer();
$p->doPrint();

将__autoload换成 loader函数。但是 loader不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行 loader()。

你可能感兴趣的:(PHP,函数)