zoukankan      html  css  js  c++  java
  • 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:要求类名与文件名相同;

    是不是很方便!

     
  • 相关阅读:
    【转载】Spring各jar包详解
    Docker attach卡着的解决
    三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别
    决策表
    因果图与决策表法
    边界值分析法
    黑盒测试方法
    软件测试的基本流程
    软件测试原则
    软件测试与软件开发
  • 原文地址:https://www.cnblogs.com/olaf/p/3831484.html
Copyright © 2011-2022 走看看