【发布时间】:2011-04-12 16:20:24
【问题描述】:
我在搜索如何在 PHP 中伪造多重继承时发现了这一点(因为 PHP 不直接支持多重继承)。
Can I extend a class using more than 1 class in PHP?
这是那里给出的完整代码:-
class B {
public function method_from_b($s) {
echo $s;
}
}
class C {
public function method_from_c($s) {
echo $s;
}
}
class A extends B
{
private $c;
public function __construct()
{
$this->c = new C;
}
// fake "extends C" using magic function
public function __call($method, $args)
{
$this->c->$method($args[0]);
}
}
$a = new A;
$a->method_from_b("abc");
$a->method_from_c("def");
问题
此处给出的示例仅考虑函数C::method_from_c($s) 的一个参数。它适用于一个参数,但我有几个class C 的函数,有些有 2 个,有些有 3 个参数,如下所示:-
class C {
public function method_from_c($one,$two) {
return $someValue;
}
public function another_method_from_c($one,$two, $three) {
return $someValue;
}
}
而且我不想更改 C 类的函数定义中的任何内容(它必须接受那么多参数)。例如。我不想像这样在C::method_from_c($s,$two) 中使用 func_get_args():-
public function method_from_c()
{
$args = func_get_args();
//extract params from $args and then treat each parameter
}
在class A 的__call() 函数内部做什么才能使其工作。我希望能够调用Class C 之类的函数$obj->method_from_c($one,$two);
谢谢
桑迪潘
【问题讨论】:
标签: php parameter-passing multiple-inheritance