此代码运行良好。必须声明子类方法是否与PHP中的父类方法兼容?
ParentClass
是抽象类。我想我可以通过
$class = new ReflectionClass('ParentClass');
$methods = $class->getMethods(ReflectionMethod::IS_ABSTRACT);
这说明了几个方法,其中一个被命名为methodA
验证。
这里来真正把我难倒了:
有一个ChildClass
,这是一个具体的类并实现抽象方法methodA
之一。使用
$method = new ReflectionMethod('ChildClass', 'methodA');
var_dump($method->getParameters());
我可以验证有3个参数。因为我知道代码运行良好。我用同样ReflectionMethod验证ParentClass
$method = new ReflectionMethod('ParentClass', 'methodA');
var_dump($method->getParameters());
此输出一个空数组,其指示无参数,我想。
为什么?可悲的是,我不能看这些类的源代码,但我一直在试图找出这个没有太多进展:
到目前为止,我只能做这样的事情。代码是PHP5.4。我真的无法弄清楚如何抽象方法_myFunction
没有参数,但具体的子类方法与3个参数。 PHP使用__call
来超载,但这是更多的extending
问题,我想。
class A {}
abstract class MyAbstractClass
{
//abstract public function _myFunction();// ERROR
abstract public function _myFunction(A $a, A $b, A $c);
}
class Foobar extends MyAbstractClass
{
public function _myFunction(A $a, A $b, A $c = null)
{
echo "abc";
}
}
$a = new Foobar();
$a->_myFunction(new A(), new A(), new A());
$a->_myFunction(new A(), new A());
//output: abcabc without error
补充:
写下来的问题后,它帮助我继续我的测试,我想我知道为什么了。子方法已将所有3个参数都设为默认值。
class Foobar extends MyAbstractClass
{
public function _myFunction(A $a = null, A $b = null, A $c = null)
{
echo "abc";
}
}
这会奏效。