Was bedeutet $ this- $ cmd ($ arg) in PHP?

9

Ich versuche, einen PHP-Code durchzugehen, den ich nicht geschrieben habe, und ich bin in eine Sackgasse geraten, in der ich nicht herausfinden kann, wie ich weitermachen soll.

Ich habe eine Klassenfunktion erreicht, die wie folgt aussieht:

%Vor%

Was macht dieser Code? Der Wert von $ cmd ist die Zeichenkette "info", also nahm ich an, dass es die Memberfunktion "info" aufruft ... aber wenn ich den Trace-Code an den Anfang dieser Funktion setze, produziert er keine Ausgabe.

Ich habe auch versucht mit var_dump ($ this- & gt; $ cmd), aber es druckt NULL. Aber die Funktion wird aufgerufen und gibt ein Ergebnis zurück, also kann var_dump keine Funktionen dumpen?

Ich habe eine andere Antwort hier gefunden schlägt vor, dass das oben genannte nicht funktionieren sollte. Allerdings wird $ result definitiv einen komplexen Wert zugewiesen, den ich nach dem Aufruf zurückgeben kann.

Wenn es darauf ankommt, ist mein Trace-Code darunter. Ich suche in der Apache error.log-Datei, und es funktioniert überall sonst gut, so nehme ich an, der Trace-Code ist gut:

%Vor%

Aktualisierung: Ich habe auch versucht, eine leere return-Anweisung als erste Zeile der "info" -Funktion zu setzen, aber $result erhält immer noch den gleichen Wert wie zuvor ...

    
Michael 20.04.2015, 23:50
quelle

1 Antwort

4

Wie Sie wissen, sind $result und $args Variablen.

Wie Sie sich vorstellen können, sind $this und $cmd ALSO Variablen.

$ dies bezieht sich auf die Klasseninstanz. Zum Beispiel, wenn myClass.a , dann kann "a" von jeder "myClass" -Methode als "$ this- & gt; a" referenziert werden.

PHP unterstützt im Gegensatz zu vielen anderen objektorientierten Sprachen auch Elementnamen als Variablen. Es unterstützt "Variablenvariablen" . Das ist $cmd ist: welcher Wert von "cmd" Wenn Sie als Parameter übergeben werden, erwartet die Funktion eine passende Methode.

Hier finden Sie weitere Details:

Ссылка

Wie dieses "Schlüsselwort" zu erklären ist auf eine beste und einfache Weise?

Warum Sie Ihre Trace-Anweisung nicht treffen - das ist nur eine Frage des Debugging:

  • Übersetzt sich "$ cmd" zu dem Namen, den Sie denken?
  • Hat Ihre Klasse eine solche Methode?
  • Gibt es noch andere Klassen, die Konflikte verursachen könnten?
  • usw.

Ich würde Ihren bevorzugten PHP-Debugger starten und, wenn möglich, den Code Schritt für Schritt durchgehen.

Hier sind einige IDEs, die PHP-Debugging unterstützen:

Ссылка

    
FoggyDay 21.04.2015, 00:00
quelle

Tags und Links