我在搜索如何僞造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