spl_autoload_register函数

spl_autoload_register

(PHP 5 >= 5.1.2)

spl_autoload_register — 注册__autoload()函数

bool spl_autoload_register ([ callback $autoload_function ] )

将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为 spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或spl_autoload_call()。

欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数spl_autoload()

 

上代码:

现在在ClassA.php文件中定义ClassA类

1 class ClassA{
2     
3  public  function __construct(){
4     
5   echo "ClassA load success!";
6   
7  }
8  
9 }

ClassB.php文件中:

1 class ClassB extends ClassA {
2     
3     public function __construct(){
4         
5         echo "ClassB load success!";
6         
7     }
8     
9 }

现在要在第三个文件中实例化上面两个类

就要引入这两个文件

1 require_once "ClassA.php";
2 require_once "ClassB.php";
3 
4 $newobj = new ClassA();
5 
6 $newobj = new ClassB();

显得非常麻烦。现在,用spl_autoload_register函数:

function DIY_autoLoad($classname){

    $classpath = "./".$classname.'.php';
    
    if (file_exists($classpath)) {
        
        require_once($classpath);
        
    }
}

spl_autoload_register('DIY_autoLoad');

$newobj = new ClassA();

$newobj = new ClassB();
spl_autoload_register('DIY_autoLoad');
如果是一个类中的一个方法则spl_autoload_register('DIY_autoLoad');
代码如下:
 1 class DIY {
 2     static function DIY_autoLoad($classname){
 3         $classpath = "./".$classname.'.php';
 4         if (file_exists($classpath)) {
 5             require_once($classpath);
 6         }
 7     }
 8 }
 9 spl_autoload_register(array('DIY', 'DIY_autoLoad'));
10 
11 $newobj = new ClassA();
12 
13 $newobj = new ClassB();

数组第一个单元为类名,第二个单元为静态方法名,注意了,是静态;

PS:要求类名与文件名相同;

是不是很方便!

 
原文地址:https://www.cnblogs.com/olaf/p/3831484.html