单个抽象函数/抽象重载的多个方法签名

时间:2010-12-15 13:21:10

标签: php oop polymorphism abstract-class overloading

我有一个抽象类用于将数据从一个数据库移动到另一个数据库,有时创建基本条目所需的数据是不同的,因为目标数据库中存在遗留表,其中包含用于查找数据的指令来源。显然简化了,问题出现在这里:

abstract class foo
{
    protected abstract function createBaseEntry($id);
}

有时候,我只需要传递给这个函数的一个ID,但在某些情况下我需要传递两个。当然,如果具体方法的实际方法签名与抽象方法不匹配,PHP将引发致命错误并停止执行。除了使用null预定义最大数量的参数并修改扩展此参数的每个具体类之外,还有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

如果您不想/不想func_num_args(),可以使用func_get_args()change the method signature to have an optional second argument来确定运行时的参数数量。

示例

function foo()
{   
    $num  = func_num_args();
    $args = func_get_args();
    var_dump($num, $args);
}

foo(1, 2, 3);   

输出(codepad

int(3) 
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 

当签名中定义了参数时,这也会起作用。