Ich habe einige Tests (um alten Code zu ersetzen) mit der __invoice Magic-Methode gemacht und ich bin mir nicht sicher, ob das ein Bug ist oder nicht:PHP5.3: "Aufruf zu undefinierter Methode" Fehler beim Aufrufen von Aufruf von Klassenvariable
Lets Angenommen, wir haben eine Klasse:
class Calc {
function __invoke($a,$b){
return $a*$b;
}
}
Das folgende ist möglich und funktioniert ohne Probleme:
$c = new Calc;
$k = $c;
echo $k(4,5); //outputs 20
Allerdings, wenn ich eine andere Klasse haben wollen eine Instanz dieses Objekt zu speichern, , Hat dies nicht:
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.
}
}
Der Fehler tritt auf, wenn wir versuchen, es zu nennen mag:
$t = new Test;
echo $t->k(4,5); //Error: Call to undefined method Test::k()
Ich weiß, dass eine „Lösung“ eine Funktion innerhalb der Klasse Test haben könnte (benannt k), um den Anruf mit call_user_func_array "weiterzuleiten", aber das ist nicht elegant.
Ich muss diese Instanz innerhalb einer gemeinsamen Klasse (für Design-Zwecke) behalten und in der Lage sein, sie als Funktion von anderen Klassen zu nennen ... irgendeinen Vorschlag?
Update:
ich etwas interessantes (zumindest für meine Zwecke) gefunden:
Wenn wir die "Klassenvariable" in einer lokalen Variablen zuweisen funktioniert es:
$t = new Test;
$m = $t->k;
echo $m(4,5);
Bitte geben Sie ein vollständiges Codebeispiel an, das Ihr Problem zeigt. Das von Ihnen angegebene Codebeispiel funktioniert nicht und das von Ihnen angegebene Codebeispiel verursacht ein Problem. – Sjoerd
Ja, tut mir leid, mein Schlechter ... Ich aktualisiere es. Sjoerd: Hat dieses Beispiel für dich funktioniert? komisch: S – lepe