我有一个 X 类,我可以从那里访问我的应用程序的其余类。这种访问是动态完成的。下面的示例代码(这里是演示):
<?
class ClassX
{
var $ClassA;
var $ClassB;
function __construct()
{
$this->ClassA = new ClassA();
$this->ClassB = new ClassB();
}
}
class ClassA
{
function methodA($param)
{
echo $param;
}
}
class ClassB
{
function methodB($param)
{
echo $param + 1;
}
}
/*I can do this for class A*/
$class = "ClassA";
$method = "methodA";
$param = array("some text");
/*or this for class B*/
//$class = "ClassB";
//$method = "methodB";
//$param = array(5);
$objX = new ClassX();
$chain = $objX->{$class};
call_user_func_array(array($chain, $method), $param);
?>
我在想是否可以更进一步,摆脱 X 中的显式对象实例。
在上面的代码中,我“卡住”了 A 和 B。
我正在寻找一种方法来构建一个加载不同模块但不知道将首先加载哪些模块的应用程序。所以如果明天我有一个 C 模块,我不必更改 X。如果我不再支持 B,同样适用。
我在 X 中尝试过这样的事情:
function __get($object)
{
$this->$object = new $object();
}
但后来我得到一个无效的回调错误,所以我猜 call_user_func_array 不在表中
有可能做我想要达到的目标吗?
解决方案:
斯派瑞克成功了!我只需要在 __get() 中返回
function __get($object)
{
$this->$object = new $object();
return $this->$object;
}
最终代码在这里