繁体   English   中英

PHP - 伪造的多重继承 - 如何将多个参数传递给函数

[英]PHP - Faked Multiple inheritance - How to pass multiple parameters to functions

我在搜索如何在PHP中伪造多重继承时发现了这一点(因为PHP不直接支持多重继承)。

我可以在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() C::method_from_c($s,$two)如下所示: -

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);

谢谢
Sandeepan

你可以使用call_user_func_array

function __call($method, $args) {
    call_user_func_array(array(&$this->c, $method), $args);
}

请注意,这不会表现得那么好。

您可以在手册中找到答案吗?

public function __call($method_name, $args)
{
   return call_user_method_array($method_name, $this->c, $args);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM