PHP函数spl_autoload_register()用法和__autoload()介绍

 更新时间:2012年02月04日 16:15:18   投稿:mdxy-dxy  
又是框架冲突导致__autoload()失效,用spl_autoload_register()重构一下,问题解决

__autoload()的用法就不再说了,以前已经在我的WEB开发笔记中说过。PHP __autoload函数(自动载入类文件)的使用方法, 原文地址:https://www.jb51.net/article/29625.htm

说一说,spl_autoload_register()的用法吧,很简单,可以这样理解,就是声明一个自定义__autoload(),你可以是A函数,也可以是B函数,想怎么样就怎么样,函数体的写法,当然要和__autoload()一样就OK 了。

当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 abc{ 
function __construct() 
{ 
echo 'www.chhua.com; 
} 
} 
?>

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();//实现自动加载,很多框架就用这种方法自动加载类 
?> 

spl_autoload_register装载函数的正确写法

AutoLoading\loading

<?php
namespace AutoLoading;

class Loadind {
 public static function autoload($className){
        //根据PSR-O的第4点 把 \ 转换层(目录风格符)   DIRECTORY_SEPARATOR , 
    //便于兼容Linux文件找。Windows 下(/ 和 \)是通用的
    //由于namspace 很规格,所以直接很快就能找到
    $fileName = str_replace('\\', DIRECTORY_SEPARATOR, DIR . '\\'. $className) . '.php';
    if (is_file($fileName)) {
      require $fileName;
    } else {
      echo $fileName . ' is not exist'; die;
    }    }   
}

index.php

//定义当前的目录绝对路径
define('DIR', dirname(__FILE__));
//加载这个文件
require DIR . '/loading.php';
//采用`命名空间`的方式注册。php 5.3 加入的
//也必须是得是static静态方法调用,然后就像加载namespace的方式调用,注意:不能使用use
spl_autoload_register("\\AutoLoading\\loading::autoload"); 
// 调用三个namespace类
//定位到Lib目录下的Name.php 
Lib\Name::test();
//定位到App目录下Android目录下的Name.php
App\Android\Name::test();
//定位到App目录下Ios目录下的Name.php
App\Ios\Name::test();

相关文章

  • 生成ubuntu自动切换壁纸xml文件的php代码

    生成ubuntu自动切换壁纸xml文件的php代码

    运行代码后在图片目录下会生成yuxing.xml,方便ubuntu自动切换壁纸.
    2010-07-07
  • PHP利用ChatGPT实现轻松创建用户注册页面

    PHP利用ChatGPT实现轻松创建用户注册页面

    ChatGPT 是 OpenAI 开发的 GPT语言模型的变体,它是一种大型单向语言模型。本文就来利用ChatGPT创建简单的用户注册页面,感兴趣的可以了解一下
    2023-02-02
  • php实现猴子选大王问题算法实例

    php实现猴子选大王问题算法实例

    这篇文章主要介绍了php实现猴子选大王问题算法,实例分析了算法的原理与解决方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • php把文件设置为插件的技巧方法

    php把文件设置为插件的技巧方法

    在本篇文章里小编给大家分享的是关于php把文件设置为插件的技巧方法,有需要的朋友们可以参考学习下。
    2020-02-02
  • 教你识别简单的免查杀PHP后门

    教你识别简单的免查杀PHP后门

    这类后门让网站、服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的。今天我们细数一些有意思的PHP一句话木马。
    2015-09-09
  • php禁止某ip或ip地址段访问的方法

    php禁止某ip或ip地址段访问的方法

    这篇文章主要介绍了php禁止某ip或ip地址段访问的方法,涉及服务器变量$_SERVER、文件及字符串的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • iis6手工创建网站后无法运行php脚本的解决方法

    iis6手工创建网站后无法运行php脚本的解决方法

    下面小编就为大家带来一篇iis6手工创建网站后无法运行php脚本的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • PHP 函数学习简单小结

    PHP 函数学习简单小结

    下面是一些php下经常用的函数,都是些必须要知道的函数,只有知道有个函数与功能,才可能组装成完整的功能强大的系统。
    2010-07-07
  • 在Mac OS下搭建LNMP开发环境的步骤详解

    在Mac OS下搭建LNMP开发环境的步骤详解

    这篇文章主要介绍了在Mac OS下搭建LNMP开发环境的步骤,文中通过一步步的步骤介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • PHP设计模式之模板方法模式Template Method Pattern详解

    PHP设计模式之模板方法模式Template Method Pattern详解

    在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式
    2022-12-12

最新评论