PHP是否有条件扩展类? (笨3用例)
问题描述:
我使用下面的场景,但是这并不一定只涉及笨。PHP是否有条件扩展类? (笨3用例)
HMVC:https://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
);
有关示例,请参见:
笨负载核心文件'CI_'&'MY_' ** **前'HMVC MX_'。所以没有办法让'MY_'检查是否声明了MX_'。 我也不想编辑核心'CI_'文件,因为它们不打算修改。 但你的回答确实帮助我制定了考虑CodeIgniter的正确解决方案。 – whisky