Ale*_*lex 2 php arrays performance constants
我有一个脚本(一个小而简单的类似CMS的系统),我一直在努力将其用于客户端站点.由于客户有不同的要求,我实施了一个模块系统,允许我修改/或添加功能到CMS,而无需修改CMS脚本.
如何实现允许我从模块更改主CMS的默认设置的配置系统?
例如,CMS默认有两个菜单:$menu = array('menu-1', 'menu-2');
如何从模块中覆盖此设置?
我想到的一个解决方案是使用常量和序列化/反序列化:
defined("BLA") or define("BLA", serialize(array(
'boo' => 'stuff',
'foo' => array('1', '2', '3'),
'moo' => true,
...
)));
Run Code Online (Sandbox Code Playgroud)
因此,我可以在模块初始化函数中轻松覆盖此设置,该函数在CMS中定义常量之前运行.
然后我在我的脚本中到处使用这些常量,例如:
$bla = unserialize(BLA);
...
foreach(unserialize(BLA) as $key => $value)...
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用全局变量,但人们说使用全局变量是不好的.
那么我有什么更好的解决方案吗?
我建议使用带有静态变量的类.或多或少相同的结果,但不需要反序列化,您实际上可以使用变量,而不是临时变量.
// My Constants
class MCo {
public static $BLA = array(
'boo' => 'stuff',
'foo' => array('1', '2', '3'),
'moo' => true,
// ...
);
}
echo MCo::$BLA['boo'];
foreach (MCo::$BLA as $key => $value) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
编辑: ircmaxell有一点,考虑一下
// My Private Constants
class MPCo {
private static $_BLA = array(
'boo' => 'stuff',
'foo' => array('1', '2', '3'),
'moo' => true,
// ...
);
public static BLA() {
return self::$_BLA;
}
}
foreach (MPCo::BLA() as $key => $value) {
// ...
}
Run Code Online (Sandbox Code Playgroud)