Wykonałem kilka testów (aby zastąpić stary kod) metodą magiczną __invoke i nie jestem pewien czy to błąd, czy nie:PHP5.3: "Wywołanie nieokreślonej metody" błąd podczas wywoływania wywołania ze zmiennej klasy
Pozwala Załóżmy, że mamy klasę:
class Calc {
function __invoke($a,$b){
return $a*$b;
}
}
poniższych jest możliwe i działa bez problemu:
$c = new Calc;
$k = $c;
echo $k(4,5); //outputs 20
jednak jeśli chcę mieć inną klasę do przechowywania instancji tego obiektu , to nie działa:
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.
}
}
Błąd występuje, gdy staramy się go nazwać jak:
$t = new Test;
echo $t->k(4,5); //Error: Call to undefined method Test::k()
wiem, że „rozwiązanie” może być mieć funkcję wewnątrz klasy test (o nazwie k), aby "przekazać dalej" połączenie za pomocą funkcji call_user_func_array, ale to nie jest eleganckie.
Potrzebuję zachować tę instancję wewnątrz wspólnej klasy (dla celów projektowych) i móc wywoływać ją jako funkcję z innych klas ... jakiejkolwiek sugestii?
Aktualizacja:
znalazłem coś ciekawego (przynajmniej dla moich celów):
Jeśli przypisujemy "class zmienną" do zmiennej lokalnej to działa:
$t = new Test;
$m = $t->k;
echo $m(4,5);
Proszę podać pełny przykład kodu, który pokazuje Twój problem. Próbka kodu, o której mówisz, działa, nie działa, a próbka kodu, którą wypowiadasz, sprawia, że problem działa. – Sjoerd
Tak, przepraszam, moja zła ... Aktualizuję. Sjoerd: Czy ten przykład pracował dla ciebie? dziwne: S – lepe