Was gibt eine PHP-Funktion standardmäßig zurück?

76

Wenn ich nichts explizit zurückgebe, was gibt eine PHP-Funktion genau zurück?

function foo() {}
  1. Um welchen Typ handelt es sich?

  2. Welchen Wert hat es?

  3. Wie teste ich es genau mit ===?

  4. Hat sich dies von php4 zu php5 geändert?

  5. Gibt es einen Unterschied zwischen function foo() {}undfunction foo() { return; }

(Ich frage nicht, wie ich es testen soll if (foo() !=0) ...)

user89021
quelle
1
Siehe php.net/manual/en/functions.returning-values.php für offizielle Dokumentation
Sophivorus

Antworten:

102
  1. null
  2. null
  3. if(foo() === null)
  4. - -
  5. Nee.

Sie können es ausprobieren, indem Sie Folgendes tun:

$x = foo();
var_dump($x);
PatrikAkerstrand
quelle
38

Wenn Sie keinen Wert von einer PHP-Funktion zurückgeben, hat dies dieselbe Semantik wie eine Funktion, die null zurückgibt.

function foo() {}

$x=foo();

echo gettype($x)."\n";
echo isset($x)?"true\n":"false\n";
echo is_null($x)?"true\n":"false\n";

Dies wird ausgegeben

NULL
false
true

Sie erhalten das gleiche Ergebnis, wenn foo durch ersetzt wird

function foo() {return null;}

Es hat keine Änderung in diesem Verhalten von PHP4 zu PHP5 zu PHP7 gegeben (ich habe nur getestet , um sicher zu sein!)

Paul Dixon
quelle
+1 aber ich wünschte ich könnte +2, dies ist die vollständigere Antwort (einschließlich Frage 4 bezüglich Verhaltensänderungen zwischen PHP-Versionen)
Jonathan
-2

Ich habe eine Kuriosität bei der Angabe von Funktionsrückgabetypen gefunden. Wenn Sie dies tun, müssen Sie explizit angeben, dass Sie etwas von Ihren Funktionen zurückgeben möchten.

<?php

function errorNoReturnDeclared($a = 10) : ?string {
    if($a == 10) {
        echo 'Hello World!';
    }
}

errorNoReturnDeclared(); //Fatal error

Error:

 Uncaught TypeError: Return value of errorNoReturnDeclared() must be of the type string or null, none returned in 

Wenn Sie sich also dazu entschließen, einige Rückgabetypspezifikationen für alte Funktionen hinzuzufügen, sollten Sie darüber nachdenken.

Patrick.SE
quelle
1
Sie finden es seltsam, dass Sie etwas zurückgeben müssen, als Sie PHP ausdrücklich sagten, dass Sie einen String oder null zurückgeben werden?
Emix
Wenn eine Funktion standardmäßig null zurückgibt, verstehe ich nicht, warum ich das tun soll, selbst wenn ich den Rückgabetyp deklariere. Der Compiler sollte sich damit befassen.
Patrick.SE