Ho eseguito alcuni test (per sostituire il vecchio codice) con il metodo magico __invoke e non sono sicuro che si tratti di un bug o meno:PHP5.3: Errore "Chiamata a metodo non definito" quando si chiama invoke dalla variabile di classe
Lascia supponiamo di avere una classe:
class Calc {
function __invoke($a,$b){
return $a*$b;
}
}
quello che segue è possibile e funziona senza alcun problema:
$c = new Calc;
$k = $c;
echo $k(4,5); //outputs 20
Tuttavia, se voglio avere un'altra classe per memorizzare un'istanza di quell'oggetto , questo non funziona:
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.
}
}
L'errore si verifica quando cerchiamo di chiamarlo come:
$t = new Test;
echo $t->k(4,5); //Error: Call to undefined method Test::k()
So che una "soluzione" potrebbe essere quella di avere una funzione all'interno della classe Test (chiamato k) per "inoltrare" la chiamata usando call_user_func_array ma non è elegante.
Ho bisogno di mantenere quell'istanza all'interno di una classe comune (per scopi di progettazione) ed essere in grado di chiamarla come funzione da altre classi ... qualche suggerimento?
Aggiornamento:
ho trovato qualcosa di interessante (almeno per i miei scopi):
Se si assegna il "variabile di classe" in una variabile locale funziona:
$t = new Test;
$m = $t->k;
echo $m(4,5);
Fornire un esempio di codice completo che mostra il problema. L'esempio di codice che dici funziona non funziona e l'esempio di codice che dici che un problema funziona. – Sjoerd
Sì, mi dispiace, mio male ... Lo aggiorno. Sjoerd: questo esempio ha funzionato per te? strano: S – lepe