zoukankan      html  css  js  c++  java
  • spl_autoload_register()和__autoload()区别

    关于spl_autoload_register()和__autoload(),相信大多数都会选择前者了? 看两者的用法:

    代码如下:

     1 //__autoload用法
     2 function __autoload($classname)
     3 {
     4     $filename = "./class/".$classname.".class.php";
     5     if (is_file($filename))
     6     {
     7         include $filename;
     8     }
     9 }
    10 
    11 //spl_autoload_register用法
    12 spl_autoload_register('load_class');
    13 
    14 function load_class($classname)
    15 {
    16     $filename = "./class/".$classname.".class.php";
    17     if (is_file($filename))
    18     {
    19         include $filename;
    20     }
    21 }

    使用spl_autoload_register()的好处是不可言喻的:

    (1)自动加载对象更加方便,很多框架都是这样做的:

     代码如下:

     1 class ClassAutoloader {
     2     public function __construct() {
     3         spl_autoload_register(array($this, 'loader'));
     4     }
     5     private function loader($className) {
     6         echo 'Trying to load ', $className, ' via ', __METHOD__, "()
    ";
     7         include $className . '.php';
     8     }
     9 }
    10 
    11 $autoloader = new ClassAutoloader();
    12 
    13 $obj = new Class1();
    14 $obj = new Class2();

    (2)你要知道__autoload()函数只能存在一次啊,spl_autoload_register()当然能注册多个函数

     代码如下:

    1 function a () { 
    2     include 'a.php';
    3 } 
    4 function b () { 
    5     include 'b.php';
    6 } 
    7 spl_autoload_register('a'); 
    8 spl_autoload_register('b'); 

    (3)SPL函数很丰富,提供了更多功能,如spl_autoload_unregister()注销已经注册的函数、spl_autoload_functions()返回所有已经注册的函数等。

    详见PHP参考手册:关于SPL函数列表. 

    注意: 

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

     代码如下:

    1 /** 
    2 *__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法 
    3 * 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list 
    4 */ 
    5 spl_autoload_register( '__autoload' ); 
  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/redfire/p/7701756.html
Copyright © 2011-2022 走看看