首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OOP项目的Autoloader

OOP项目的Autoloader
EN

Stack Overflow用户
提问于 2016-01-27 08:21:22
回答 2查看 823关注 0票数 2

目前,我正忙于处理一个大型WordPress插件,该插件由几个类和接口(使用适当的名称空间)组成。从研究和我从以前的问题中得到的答案来看,最好的选择是使用接口注入(依赖注入)来维护SOC。这一阶段的一切都是按预期进行的。

我现在只剩下把所有的东西集中在一个主要的类中,它将被用作一个contoller。此时,为了测试所有内容,我使用require_once来加载类和接口(文件位于一个名为functions的文件夹中)。

例子:

代码语言:javascript
复制
require_once( '/functions/INTERFACEA.php' );
require_once( '/functions/CLASSA.php'     );
require_once( '/functions/INTERFACEB.php' );
require_once( '/functions/CLASSB.php'     );
//etc

我听说过自动加载器,但并不完全理解如何在控制器类中使用它们。我真正需要避免的一个问题是,类在其接口之前被加载,因为如果加载序列错误,我会得到一个致命的错误,说明我的接口不存在。

我的问题是:

如何正确地利用控制器类中的自动加载器来加载我的类和整数,这也确保了在它们各自的类之前加载了接口。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-27 08:30:49

使用作曲家自动显示类。它支持自动命名空间,一旦设置完毕,在它们自己的命名空间中,一切都将是自动的。

设置composer.json所需做的全部工作

代码语言:javascript
复制
"autoload": {
        "psr-4": {"Acme\\": "src/"}
    }

只需要aotoload.php,它就会管理其他一切。

代码语言:javascript
复制
require __DIR__ . '/vendor/autoload.php';
票数 1
EN

Stack Overflow用户

发布于 2016-01-27 08:30:02

您可以使用spl_autoload_register

代码语言:javascript
复制
// Defining autoloader
spl_autoload_register(function ($class_name) {

    // just make sure here that $class_name is correct file name
    // and there is $class_name.php file if no the fix it 
    // E.G. use strtoupper etc.
    $class_name = strtoupper($class_name);

    require_once( '/functions/'.$class_name.'.php' );
});

// Then simply use 
$class = new CLASSA();
// if `CLASSA` implements `INTERFACEA` here php 
// will autoload `INTERFACEA.php` and `CLASSA.php` 

查看本文以获得更多信息:http://php.net/manual/en/language.oop5.autoload.php

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35032028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档