是否可以在需要的抽象父类的子类上创建方法,但仍然允许方法签名是可选的或与定义的父方法签名不同?
abstract class Parent
{
abstract public function foo();
}
class Child extends Parent
{
public function foo(Request $request) {
// do something with request
}
}
我需要能够强制执行子项上存在的特定方法,但允许用户将他们想要的任何内容传递给该类。
看起来你不能用抽象的方法或接口来做这件事,怎么办呢?
答案 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
}
}