【发布时间】:2020-08-05 01:41:19
【问题描述】:
我喜欢修改继承类的一个私有方法。
这些是我的要求:
- 我无法修改父类。
- 我必须重用继承类的代码。
- 我需要在父类的私有方法代码之前附加一些代码。
基本上我喜欢这段代码
<?php
class ParentClass
{
public function doStuff()
{
echo 'Doing parent stuff';
$this->doPrivateStuff();
echo 'Doing more parent stuff';
}
private function doPrivateStuff()
{
echo 'Doing private stuff';
}
}
class ChildClass extends ParentClass
{
private function doPrivateStuff()
{
echo 'Additional code';
parent::doPrivateStuff();
}
}
$obj = new ChildClass;
$obj->doStuff();
?>
输出
做父母的事 附加代码 做私事 做更多父母的事情而不是
做父母的事 做私事 做更多父母的事情我知道我的代码“失败”了,因为 doPrivateStuff 是一个私有方法。
重用私有方法的修改版本的最佳解决方法是什么?
PS:
我目前的解决方法是通过反射和evaluating 解析父方法的主体,在我的ChildClass 中实现方法doStuff 和doPrivateStuff。
我并不完全认为这是一种“干净”的方法,咳咳。所以我很高兴阅读您的建议。
【问题讨论】:
-
感谢您的评论,@Phil!这表明我的例子不够清楚。您建议的方法不起作用,因为
parent::doStuff不仅仅是输出一行。请看我固定的例子!