Мне нравится изменять один частный метод унаследованного класса.
Вот мои требования:
- Я не могу изменить родительский класс.
- Мне нужно повторно использовать код унаследованного класса.
- Мне нужно добавить некоторый код перед кодом частного метода родителя.
В основном мне нравится этот код
<?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();
?>
для вывода
Doing parent stuff
Additional code
Doing private stuff
Doing more parent stuff
вместо
Doing parent stuff
Doing private stuff
Doing more parent stuff
Я знаю, что мой код «не работает», потому что doPrivateStuff
является частным методом.
Какой обходной путь лучше всего использовать для повторного использования модифицированной версии частного метода?
PS:
Мой текущий обходной путь - реализовать методы doStuff
и doPrivateStuff
в моем ChildClass
путем анализа тел родительских методов посредством отражения и eval
их обработки.
Я не считаю это «чистым» подходом, кхм. Так что я рад прочитать ваши рекомендации.