__autoload()不执行的解决办法spl_autoload_register();

在php5之后已经有了类的自动加载机制,可以定义__autoload函数,在使用到某个未定义的类,执行php会出错,但是在此时php引擎在返回失败之前会去check下是否有定义__autoload去加载需要的类。
但是,今天晚上__autoload()这个函数却折磨了我两个小时,function方法进不去,至今没有找到合理的解释。无奈之下只好用spl_autoload_register(); 
经过搜索资料,可能是应为我用的smarty版本高,没有拿低版本的试验。下面说一下__autoload的弊端:


一个项目中只能定义一个__autoload,假如说当项目中引用了第三方文件时,刚好第三方文件中也使用__autoload;或者项目成员多的时候,定义了不同的 __autoload; 此时就会出错,因为__autoload函数拥有全局域,php也支不支持函数重载,只能将几个__autoload合并成一个。
于是就有了更加灵活的spl_autoload_register()的自动加载机制,php官方也建议不要使用__autoload而使用spl_autoload_register()。

既然__autoload()方法兼容性这么差,那就果断放弃,使用更好用spl_autoload_register()好了; 


let's go!!!

比如我需要自动加载根目录下action目录下的 *Action.class.php 文件,如下:


1、先写一个init.php;如下

<?php
header('Content-type:text/html;charset=utf-8');
define('ROOT_PATH',dirname(__FILE__));
//写一个autoloadHandler方法
function autoloadHandler($_className){
if(substr($_className, -6)=='Action'){
echo $_className;      //输出类名
require ROOT_PATH.'/action/'.$_className.'.class.php';
}
}
//将autoloadHandler注册为自动加载
spl_autoload_register('autoloadHandler');


?>

2、然后在需要的地方引入init.php,比如:

    <?php 
require 'init.php';
  new ManageAction();
    ?>

3、程序执行后结果

Action.class.php被引入

输出ManageAction


OVER


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值