Return true; wird nicht beachtet?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ansatzpunkt
array
aufgefallen
ausgabe
blocken
code
doofen fehler
ende
funktion
funktionieren
gleiches ergebnis
hilfe
idee
papier
status
string
tat
teil
tip
url
-
Für diesen Code:
public function recvMessages() { $arr_recv = $this->recvData(); $arr_data = $this->splitData($arr_recv); foreach($arr_data as $arr_splitData) { $this->int_lastSentStatus = $arr_splitData['status']; if($this->int_lastSentStatus == 134) { $this->str_message = substr($arr_splitData['data'], 0, -1); } $arr_reply = $this->getReply($arr_splitData); if($arr_reply['status'] != 0) { if($this->sendData($arr_reply)) { $this->int_lastSentStatus = $arr_reply['status']; } else { http_response_code(500); socket_close($this->socket); } } } if($this->int_lastSentStatus == 230 && $this->str_message != '') { $this->sendData(array( 'status' => 550, 'data' => 'Closing' )); socket_close($this->socket); echo '############'; return true; } else if($this->int_lastSentStatus != 550) { $this->recvMessages(); } return false; }
Bekomme ich als Rückgabe:
############bool(false)
Für mich ist das unerklärlich, warum false zurückgegeben wird, obwohl der sicher in der if mit
ist.echo '############';
Hat einer von euch eine Idee, wodran das liegen könnte?
Vielen Dank schonmal für Tipps.
trik -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Dein "return false;" wir immer ausgeführt.
Verschiebe es in den else-Block und es sollte funktionieren.
Beitrag zuletzt geändert: 30.9.2012 15:03:48 von fatfreddy -
fatfreddy schrieb:
Das
Dein "return false;" wir immer ausgeführt.
Verschiebe es in den else-Block und es sollte funktionieren.
kann nur dann ausgeführt werden, wenn der Code auch bis dahin ausgeführt wird und nicht schon vorher per return (in diesem Fall return true;) die Funktion verlassen wird…return false;
-
Das ist in der Tat merkwürdig, wenn das ###### auch rauskommt. Veränder die returns mal in Strings, also sowas wie "alta" und "ende", und prüfe dann, was als return kommt. Ist nur Testweise. Gibst du den Return über "var_dump( function() ) aus, oder speicherst du es in eine Variable zwischen? Wie sieht die Ausgabe an sich aus? Kann da was verändert werden?
Sind nur so ein paar Ansatzpunkte. Ich würde da noch einmal rangehen, so über die Returnvalues, vielleicht findet man ja was, obwohl es eigentlich unlogisch ist.
Liebe Grüße -
Hab ich gemacht, ist leider trotzdem gleiches Ergebnis... Wird über var_dump ausgegeben. Verändert werden konnte das nicht, aber ich hatte einen doofen Fehler in der Denkweise, was mir aufgefallen ist, als ich es versucht habe aufm Papier darzustellen:
Die Funktion ruft ja sich selber auf und deshalb sollte es auch so sein, dass sie den Rückgabewert des Eigenaufrufs ausgibt. Deswegen war im elseif Block das
falsch, so ruft man ja nur die Funtion auf aber gibt nicht den Rückgabewert weiter, sodass die Funtion weiter ausgeführt wird bis zum$this->recvMessages();
. Nachdem ich den Teil inreturn false;
geändert hatte, lief es.return $this->recvMessages();
Trotzdem Danke für eure Hilfe :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage