Mi situación se describe mejor con un poco de código:de PHP en subclases
class Foo {
function bar() {
echo "called Foo::bar()";
}
}
class SubFoo extends Foo {
function __call($func) {
if ($func == "bar") {
echo "intercepted bar()!";
}
}
}
$subFoo = new SubFoo();
// what actually happens:
$subFoo->bar(); // "called Foo:bar()"
// what would be nice:
$subFoo->bar(); // "intercepted bar()!"
Sé que puedo conseguir que esto funcione mediante la redefinición de bar()
(y todos los otros métodos pertinentes) en el sub- clase, pero para mis propósitos, sería bueno si la función __call
pudiera manejarlos. Simplemente haría las cosas más fáciles de manejar y más manejables.
¿Es esto posible en PHP?
Esto. Debes seguir el patrón de Fachada. Tenga una clase contenedora que "posea" el objeto que desea anular todas estas funciones. Use __call() para pasar los métodos según sea necesario, haciendo cualquier trabajo adicional según corresponda. No te preocupes por el rendimiento a menos que tu código se llame constantemente y tu aplicación tenga un límite de CPU (casi nunca es el caso): el tiempo del programador es casi siempre más importante que el rendimiento para decidir sobre este tipo de intercambio. –