Führt ein einfaches 'return' in einer PHP-Funktion einfach zu einem vorzeitigen Abbruch der Funktion?

7

Ich habe das gerade gesehen

%Vor%

Ich habe vorher noch kein einfaches return gesehen, und ich habe es noch nie benutzt. Meine einzige Vermutung ist, dass es sich einfach wie jedes return 'something' verhält (die Funktion anhält), außer dass es tatsächlich kein Ergebnis zurückgibt.

Außerdem, was würde in dieser Situation passieren?

%Vor%

Ich weiß, dass es ein schlechtes Beispiel ist (es sollte wahrscheinlich false zurückgeben oder eine Ausnahme auslösen), aber wäre es ein Fehler oder wäre $var einfach null oder leer?

    
alex 11.07.2009, 15:06
quelle

5 Antworten

10
%Vor%

gibt zurück:

NULL falsch falsch wahr

    
Eddy 11.07.2009, 15:09
quelle
7

PHP wird dynamisch typisiert, daher ist die Rückgabe eines Wertes gleichbedeutend mit der Rückgabe eines Nullwertes in einem beliebigen Typ.

    
Ben 11.07.2009 15:12
quelle
4

Eine Rückgabe ohne Wert gibt null zurück.

Weitere Informationen aus dem Handbuch:

Wenn die Anweisung return () aus einer Funktion aufgerufen wird, beendet sie sofort die Ausführung der aktuellen Funktion und gibt ihr Argument als Wert des Funktionsaufrufs zurück. return () beendet auch die Ausführung einer eval () - Anweisung oder Skriptdatei.

Wird der globale Bereich aufgerufen, wird die Ausführung der aktuellen Skriptdatei beendet. Wenn die aktuelle Skriptdatei include () ed oder require () ed ist, wird die Kontrolle an die aufrufende Datei zurückgegeben. Wenn die aktuelle Skriptdatei include () ed ist, wird der Wert für return () als Wert des Aufrufs include () zurückgegeben. Wenn return () in der Hauptskriptdatei aufgerufen wird, endet die Skriptausführung. Wenn die aktuelle Skriptdatei von den Konfigurationsoptionen auto_prepend_file oder auto_append_file in der Datei php.ini benannt wurde, wird die Ausführung dieser Skriptdatei beendet.

    
mattphp 11.07.2009 15:18
quelle
2

Kurze Antwort. Es beendet nur die Funktion, es ähnelt einer Funktion ohne Rückgabeanweisung. Nichts wird zurückgegeben, die Funktion wird einfach verlassen.

In Ihrem zweiten Beispiel würde $ var = nichts.

Warum nicht ausführen und sehen?

    
Orange Box 11.07.2009 15:07
quelle
2

Ja, zurück; "oder return (); in einer Funktion stoppt die Ausführung dieser Funktion (oder der Datei, wenn die Rückgabeanweisung nicht in einer Funktion ist) an diesem Punkt (wenn der Code ausgeführt wird) und gibt technisch einen Nullwert zurück.

Ihr erstes Beispiel würde den Header "HTTP / 1.1 403 Forbidden" ausgeben und dann diese Funktion beenden, wenn request :: is_ajax () gleich true ist.

In Ihrem Codebeispiel:

%Vor%

Sie können Folgendes haben:

  • Wenn $ var NICHT TRUE ist (d. h. false, null, text oder eine Ganzzahl), beenden Sie die Funktion und geben Sie null zurück.
  • Wenn $ var GENAU WAHR ist (die if-Anweisung prüft, ob $ var etwas anderes als true ist), dann führe do_something ();
  • aus

Ich würde vermuten, dass Sie wahrscheinlich die if-Anweisung in entweder:

ändern möchten %Vor%

Wenn Sie nur eine Zeichenfolge oder

mit do_something () verknüpfen möchten %Vor%

Wenn Sie nur $ var tun möchten, wenn es gesetzt ist. Vielleicht möchten Sie auch Ihre Funktionsdeklaration ändern zu: Funktionstext ($ var == NULL) { Wenn Sie also Text ohne Parameter aufrufen, wird $ var automatisch auf null gesetzt.

    
Richy B. 11.07.2009 16:52
quelle

Tags und Links

yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '413081',
    'url' => 'does-a-simple-return-in-a-php-function-simply-end-the-function-prematurely',
];

$_COOKIE = [
    '_csrf-frontend' => '2ef7a9a7f8a35697894d9c71be15722a3b8570b86a44e43b487327880eda15f9a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"Tc-7yd5lXiTuhx__BeY7t51wo3dprcFw";}',
    'advanced-frontend' => '12dbd0398e89d2e570f199a99c1bf0fb',
];

$_SESSION = [
    '__flash' => [],
];