我在搜索如何伪造PHP中的多继承(因为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类的函数定义去改变什么(它必须接受那些许多参数)。例如。我不希望使用func_get_args()我C::method_from_c($s,$two)
像这里面的: -
public function method_from_c()
{
$args = func_get_args();
//extract params from $args and then treat each parameter
}
什么的__call()
功能class A
使其作品里面做。我希望能够调用Class C
功能,如$obj->method_from_c($one,$two);
感谢
Sandeepan
$ this-> c的引用运算符是多余的 – symcbean 2010-09-15 13:13:28
谢谢!有效!!为什么它表现不佳? – 2010-09-15 13:18:09
@sandeepan:实际上我不确定,但我依稀记得在某处读过$ foo - > $ bar()比使用call_user_func更好。 – 2010-09-15 13:29:14