加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – __autoload检测并包含接口

发布时间:2020-12-13 22:08:56 所属栏目:PHP教程 来源:网络整理
导读:我在我的脚本中使用__autoload来根据需要包含类.我的脚本使用类名中的提示来查找包含它的文件.如果它在模型中结束,它在模型目录中,控制器在控制器目录中等.我开始实现接口,因此需要调整我的自动加载器. 理想情况下,当创建对象时,自动装带器将确定对象的文件
我在我的脚本中使用__autoload来根据需要包含类.我的脚本使用类名中的提示来查找包含它的文件.如果它在模型中结束,它在模型目录中,控制器在控制器目录中等.我开始实现接口,因此需要调整我的自动加载器.

理想情况下,当创建对象时,自动装带器将确定对象的文件名,存储位置,并包含该文件.然后它将询问该类,以了解它实现的接口,然后自动包含这些文件.

就像是

function __autoload($classname){
    echo $classname;
    include ("classes/$classname.php");
    $interfaces = class_implements($classname,FALSE);
    foreach($interfaces as $name){
        if(!class_exists($name,FALSE)){
        include("interfaces/".$name."inter.php");
        }
    }
}

除非我这样做,否则我会收到错误

Cannot redeclare __autoload() (previously declared in
W:xampphtdocstestauto.php:5) in W:xampphtdocstestauto.php on
line 11

是不是可以在__autoload()中执行此操作?我是否应该继续依赖命名约定来区分对象类型和存储位置?

解决方法

在定义实现的接口之前,您无法定义类,并且任何未知接口也会触发自动加载功能.这意味着在第3行包含类时,它将再次触发自动加载功能,接口为$classname.现在当从第二个__autoload()返回时 – 它将再次尝试包含接口,这将因“已定义”而失败.

附加:使用__autoload()不建议使用spl_autoload_register()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读