默认情况下,php函数返回什么?


76

如果我没有明确返回任何内容,那么php函数到底返回什么?

function foo() {}
  1. 什么类型的

  2. 它有什么价值?

  3. 如何使用===进行准确测试?

  4. 这是否从php4更改为php5?

  5. 有没有之间的差异function foo() {}function foo() { return; }

(我不是在问如何测试它if (foo() !=0) ...


Answers:



38

不从PHP函数返回值的语义与返回null的函数的语义相同。

function foo() {}

$x=foo();

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

这将输出

NULL
false
true

如果将foo替换为,则会得到相同的结果

function foo() {return null;}

从php4到php5到php7的这种行为没有改变(我刚刚测试过以确保!)


+1,但我希望我能+2,这是更完整的答案(包括有关PHP版本之间行为变化的问题#4)
Jonathan

-2

指定函数返回类型时,我确实发现了一个奇怪的地方。当您这样做时,您必须明确有关从函数中返回某些内容。

<?php

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

errorNoReturnDeclared(); //Fatal error

错误:

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

因此,如果您决定在旧函数上添加一些返回类型规范,请务必考虑一下。


1
当您对PHP明确说要返回字符串或null时,必须返回任何东西,您会觉得很奇怪。
emix

好吧,如果一个函数默认返回null,那么即使声明了返回类型,我也看不到为什么要这样做。编译器应该处理它。
Patrick.SE,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.