zoukankan      html  css  js  c++  java
  • PHP函数__autoload()和spl_autoload_register() 简单

    PHP函数__autoload()和spl_autoload_register()

    __autoload($classname){

    }

    当PHP找不到类文件会调用这个方法,当注册了自己的函数或方法时,PHP不会调用__autoload()函数,而会调用自定义的函数

    spl_autoload_register('func_name');

    spl_autoload_register(array('class_name','method_name'));

    详细说明如下

    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_function 
    欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数

    spl_autoload()。

    返回值
    如果成功则返回 TRUE,失败则返回 FALSE。

    注:SPL是Standard PHP Library(标准PHP库)的缩写。它是PHP5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种Iterator接口或类。SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。

    test.class.php
    <?php
    class Test
    {
    function __construct()
    {
       echo '希望和PHP,Flex高手成为朋友。一起学习,共同奋斗!!!QQ:1055983238';
    }
    }
    ?>
    load.php
    <?php
    class LOAD
    {
    static function loadClass($class_name)
    {
       $filename = $class_name.".class.php";
       if (is_file($filename)) return include_once $filename;
    }
    }
    /**
    * 设置对象的自动载入
    * spl_autoload_register — Register given function as __autoload() implementation
    */
    spl_autoload_register(array('LOAD', 'loadClass'));
    $a = new Test();//实现自动加载,很多框架就用这种方法自动加载类
    ?>

    <?php

    class autoload 
    { 
      public static function load( $class name ) 
      {

        $filename = "/home/user/class/".$classname."class.php";
        if (file_exists($filename )) { 
          require_once $filename ; 
        } 
      } 
    } 
     
    function __autoload( $class name )
    // 这个是默认的 autoload 方法

        $filename = "/home/user/class/".$classname."class.php";
        if (file_exists($filename )) { 
          require_once $filename ; 
      } 
    } 
     
    // 注册一个 autoloader 
    spl_autoload_register( 'autoload::load' ); 
    /** 
    * __autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法 
    * 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list 
    */ 
    spl_autoload_register( '__autoload' ); 
     // 注:下面的类看上去没有定义,但其实系统根据sql_autoload_register提供的路径会自动去/home/user// /class/*.class.php下搜索foo.class.php文件,如果没找到才报错。 
    $foo new foo(); 
    $foo ->bar(); 
    ?>

  • 相关阅读:
    dedecms likearticle 调用附加表的字段调用方式
    织梦dedecms自定义字段在首页列表页文章页的调用
    织梦系统站点首页、列表、文章页等页面点击数调用方法
    dedecms友情链接flink的调用方法
    织梦dedecms5.7后台进去就卡死解决方法
    Dede修改文章默认标题长度,让标题全显示
    dede调用时间大全标签,不同格式!
    dede调用指定栏目的标签
    python time模块的使用
    phpstudy 环境使用Composer安装thinkphp并指定版本
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2091213.html
Copyright © 2011-2022 走看看