子必需方法可选签名

时间:2018-06-16 15:54:20

标签: php

是否可以在需要的抽象父类的子类上创建方法,但仍然允许方法签名是可选的或与定义的父方法签名不同?

abstract class Parent
{
    abstract public function foo();
}

class Child extends Parent
{
    public function foo(Request $request) {
        // do something with request
    }
}

我需要能够强制执行子项上存在的特定方法,但允许用户将他们想要的任何内容传递给该类。

看起来你不能用抽象的方法或接口来做这件事,怎么办呢?

1 个答案:

答案 0 :(得分:0)

您不能使用不同数量的参数,或使用抽象类输入不同类型的提示。您必须检查参数以验证它是您期望的对象类型。

如果您要将多个参数传递给某些版本的foo(),那么它会变得更加混乱。您必须使用foo(...$variable)之类的内容,然后检查每个数组位置以查找该foo()版本所期望的内容。

abstract class Parent
{
    abstract public function foo($unused);
}

class Child extends Parent
{
    public function foo($request) {
        // check type of $request 
        if ('object' != gettype($request) || 'Request' != get_class($request)) {
             // throw your exception here
        }

        // do something with request
    }
}