PHP有条件地扩展类? (CodeIgniter 3使用案例)

时间:2017-08-14 01:22:04

标签: php codeigniter internationalization extend hmvc

我使用以下方案,但这并不一定只适用于CodeIgniter

HMVC https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

国际化(i18n)https://github.com/waqleh/codeigniter-language-in-url-internationalization

HMVC& i18n通过扩展CI_Config(和相关的CI_类)来工作。

为了让i18n与 HMVC一起工作,我首先需要相应的HMVC文件,然后进一步扩展该类。

例如,CI_Config由HMVC MX_Config扩展,然后进一步要求&由i18n扩展MY_Config

但现在i18n 仅在 HMVC已经到位时才有效。

如果没有HMVC(没有MX_Config且相关)怎么办?

我希望i18n可以使用/不使用HMVC

是否有办法有条件地要求&延伸一类或另一类?或者更确切地说,在没有碰撞的情况下延长CI_Config(及相关)两次?或者有另一种方法可以实现我想要的目标吗?

HMVC MX_Config部分:

/**
 * HMVC
 */
class MX_Config extends CI_Config
{

i18n MY_Config偏:

/* load HMVC's MX_Config class */
require APPPATH . "third_party/MX/Config.php";

/**
 * Language
 */
class MY_Config extends MX_Config
{

2 个答案:

答案 0 :(得分:1)

如果类MX_Config不存在,请如何动态声明它?

<?php

class CI_Config {}

if (!class_exists('MX_Config')) {
    class MX_Config extends CI_Config {}
}

class MY_Config extends MX_Config {}

$config = new MY_Config();

var_dump(
    $config instanceof MX_Config,
    $config instanceof CI_Config
);

有关示例,请参阅:

答案 1 :(得分:0)

localheinz的回答是有效的,但没有考虑到:

CodeIgniter加载核心文件CI_&amp; {/ 1}} 之前 HMVC MY_。因此,无法MX_检查是否声明了MY_

我也不想编辑核心MX_文件,因为它们不打算修改。

工作解决方案

注意:以下相同的逻辑可以应用于其他CI_类。

MY_部分:

MY_Config