php自动加载函数

含义:将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。
先看__autoload 函数

printit.class.php
<?php
class PRINTIT {
 function doPrint() {
  echo 'hello world';
 }
}
?>
 
index.php  
<?
function __autoload( $class ) {
 $file = $class . '.class.php';  
 if ( is_file($file) ) {  
  require_once($file);  
 }
}
 
$obj = new PRINTIT();
$obj->doPrint();
?>

在index.php中,由于没有包含printit.class.php,在实例化printit时,自动调用__autoload函数,参数$class的值即为类名printit,此时printit.class.php就被引进来了。

<?
function loadprint( $class ) {
 $file = $class . '.class.php';  
 if (is_file($file)) {  
  require_once($file);  
 }
}
 
spl_autoload_register( 'loadprint' );
 
$obj = new PRINTIT();
$obj->doPrint();

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

调用静态方法

<?
class test {
 public static function loadprint( $class ) {
  $file = $class . '.class.php';  
  if (is_file($file)) {  
   require_once($file);  
  }
 }
}
 
spl_autoload_register(  array('test','loadprint')  );
//另一种写法:spl_autoload_register(  "test::loadprint"  );
 
$obj = new PRINTIT();
$obj->doPrint();
?>

 

posted on 2016-11-26 14:47  爱吃柠檬不加糖  阅读(374)  评论(0编辑  收藏  举报

导航