__autoload( $class ) :
自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数。
例子:
<?php # 比如这是test.class.php文件 class test { function show() { echo 'hello world'; } } ?> <?php # 这是index.php文件 function __autoload( $class ) { $file = $class . '.class.php'; if( is_file($file) ){ require_once($file); } } $obj = new test(); $obj->show(); ?>
运行index.php后正常输出hello world。
在index.php中,由于没有包含test.class.php.
在实例化test时,自动调用__autoload函数.
参数$class的值即为类名test,此时test.class.php就被引进来了。
在面向对象中这种方法经常使用,可以避免书写过多的引用文件,同时也使整个系统更加灵活。
spl_autoload_register(array(‘class_name','method_name')) :
这个函数与__autoload有与曲同工之妙!
例子:
<?php # 比如这是test.class.php文件 class test { function show() { echo 'hello world'; } } ?> <?php # 这是index.php文件 function load( $class ) { $file = $class . '.class.php'; if( is_file($file) ){ require_once($file); } } # 不同调用写法 // spl_autoload_register('load'); // spl_autoload_register(array('test','load')); spl_autoload_register("test::load"); $obj = new test(); $obj->show(); ?>
将__autoload换成load函数。
但是load不会像__autoload自动触发。
这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行load()。