He estado haciendo algunas pruebas (para reemplazar el código anterior) con el método __invoke magic y no estoy seguro de si esto es un error o no:PHP5.3: error de "Llamar al método indefinido" al llamar a invocar desde la variable de clase
vamos a suponer que tenemos una clase:
class Calc {
function __invoke($a,$b){
return $a*$b;
}
}
El siguiente es posible y funciona sin ningún problema:
$c = new Calc;
$k = $c;
echo $k(4,5); //outputs 20
sin embargo, si quiero tener otra clase para almacenar una instancia de ese objeto , esto no funciona:
class Test {
public $k;
function __construct() {
$c = new Calc;
$this->k = $c; //Just to show a similar situation than before
// $this-k = new Calc; produces the same error.
}
}
El error se produce cuando tratamos de llamar así:
$t = new Test;
echo $t->k(4,5); //Error: Call to undefined method Test::k()
Sé que una "solución" podría ser tener una función dentro de la clase Test (llamado k) para "reenviar" la llamada usando call_user_func_array pero eso no es elegante.
Necesito mantener esa instancia dentro de una clase común (por motivos de diseño) y poder llamarla como función de otras clases ... ¿alguna sugerencia?
Actualización:
he encontrado algo interesante (al menos para mis propósitos):
Si asignamos la "variable de clase" en una variable local funciona:
$t = new Test;
$m = $t->k;
echo $m(4,5);
Proporcione un ejemplo de código completo que muestre su problema. La muestra de código que dices funciona no funciona y la muestra de código que dices da un problema. – Sjoerd
Sí, lo siento, mi mal ... Lo actualizo. Sjoerd: ¿Ese ejemplo funcionó para ti? extraño: S – lepe