PHP是否有条件扩展类? (笨3用例)

PHP是否有条件扩展类? (笨3用例)

问题描述:

我使用下面的场景,但是这并不一定只涉及笨PHP是否有条件扩展类? (笨3用例)

HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

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

通过延伸CI_Config(和相关CI_班)两者HMVC & I18N工作。

为了让i18n工作在旁边 HMVC,我首先必须要求适当的HMVC文件,然后进一步扩展那个类。

因此,例如,CI_Config由HMVC MX_Config扩展,然后进一步需要&由i18n MY_Config扩展。

但现在i18n 只适用于如果 HMVC已经到位。

如果HMVC不存在(不MX_Config和相关的)?

我想国际化的工作都带/不带HMVC

是否有需要有条件地延长&一类或其他的方法吗?或者说,相当于两次延伸CI_Config(及相关)而不会发生碰撞?还是有另一种方法来实现我想要的?

HMVC MX_Config部分:

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

国际化MY_Config部分:

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

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

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

笨负载核心文件CI_ & MY_ HMVC MX_。因此没有办法让MY_检查是否声明了MX_

我也不想要编辑的核心CI_文件,因为它们是注定不会被修改。

工作溶液

注意:下面的相同的逻辑可被应用到其他MY_类。

MY_Config部分:

/* load HMVC's MX_Config class */ 
if (file_exists(APPPATH . "third_party/MX/Config.php")) { 
    require APPPATH . "third_party/MX/Config.php"; 
/* otherwise declare MX_Config class */ 
} else { 
    class MX_Config extends CI_Config {} 
} 


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

如何声明类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 
); 

有关示例,请参见:

+0

笨负载核心文件'CI_'&'MY_' ** **前'HMVC MX_'。所以没有办法让'MY_'检查是否声明了MX_'。 我也不想编辑核心'CI_'文件,因为它们不打算修改。 但你的回答确实帮助我制定了考虑CodeIgniter的正确解决方案。 – whisky