spl_autoload_register 与 __autoload 详解

1、__autoload

这是一个自动加载函数。在PHP5中,当我们去实例化一个未定义的类时,就会自动触发该函数,请看下例:

<?php 
class Smile{ 
    function doPrint() { 
        echo 'hello world'; 
    }
}
?> 

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


index.php中未引入Smile类,所以在index.php中去实例化Smile类时并不能找到Smile类,这时就会触发__autoload函数,我们可以在__autoload函数动态引入所要实例化的类,这样就能实现动态加载类了,可以避免书写过多的引用文件,很方便。

2、spl_autoload_register

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

<?
function loadprint( $class ) {
 $file = $class . '.class.php';  
 if (is_file($file)) {  
  require_once($file);  
 } 
} 

spl_autoload_register( 'loadprint' ); 

$obj = new Smile();
$obj->doPrint();
?>

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

spl_autoload_register() 调用静态方法

<? 

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();
?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值