Я нашел это, когда искал способ подделать множественное наследование в PHP (поскольку PHP не поддерживает множественное наследование напрямую).
Могу ли я расширить класс, используя более 1 класса в 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