前言
不仅是PHP,大部分编程语言的函数或者叫方法,都可以用return来定义方法的返回值。从函数这个叫法来看,本身它就是一个计算操作,因此,计算总会有个结果,如果你在方法体中处理了结果,比如进行了持久化保存,那么这个函数就不用返回任何内容。而计算的结果是要给外部使用的,这时候就要将计算结果进行返回了。

return关键字
`function testA($a, $b)
{
echo $a + $b;
}

var_dump(testA(1, 2)); // NULL

function testB($a, $b)
{
return $a + $b;
}

var_dump(testB(1, 2)); // 3

function testC($a, $b)
{
return;
echo $a + $b; // 后面不会执行了
}

var_dump(testC(1, 2)); // NULL`
不用return或者直接return;都会返回NULL,return会阻断方法体中后续代码的执行。如果要返回多个值,只能使用数组组装数据。
function testD($a, $b)
{
return [
$a + $b,
$a * $b,
];
}

  1. var_dump(testD(1, 2)); // [3, 2]

返回值类型声明
关于返回值这一块还是比较好理解的。下面才是重头戏,在PHP7的新特性中,返回值声明是非常亮眼的一道风景。
function testE($a, $b) : bool
{
if($a+$b == 3){
return TRUE;
}else{
return NULL;
}
}
var_dump(testE(1, 2)); // true
var_dump(testE(1.1, 2.2)); //TypeError: Return value of testE() must be of the type bool, null returned
如上例所示,如果返回值不是bool类型,那么将直接报TypeError的错误。

那么定义了返回值类型声明有什么好处呢?我们在PHP方法参数的那点事儿 有介绍过类型声明的好处,这里就不过多赘述了,不管是参数类型声明还是返回值类型声明,都是一样的。
function testF($a, $b): array
{
return [
$a + $b,
$a * $b,
];
}
var_dump(testF(1, 2)); // [3, 2]

  1. interface iA{
  2. }
  3. class A implements iA
  4. {}
  5. class B extends A
  6. {
  7. public $b = 'call me B!';
  8. }
  9. function testG(): A
  10. {
  11. return new B();
  12. }
  13. function testH(): B
  14. {
  15. return new B();
  16. }
  17. function testI(): iA
  18. {
  19. return new B();
  20. }
  21. var_dump(testG()); // B的实例
  22. var_dump(testH()); // B的实例
  23. var_dump(testI()); // B的实例

同样,数组和类类型都是可以声明定义的。不过除此之外,返回值声明还可以定义void。它的作用其实就是声明返回值为NULL,不能直接写:NULL,而只能用:void来进行声明
`function testJ(): void
{
echo “testJ”;
// return 1;
}
var_dump(testJ());
这时,如果尝试进行任何的return返回,都会直接报错:Fatal error: A void function must not return a value。

总结
我们可以看到,PHP在不断的发展中一直在吸取其他语言中的优秀特性。很明显,添加这些类型声明的目的就是为了将来的编译器做准备的。这也是PHP8的一个重要特性,让我们拭目以待吧!

更多相关文章

  1. android 屏幕上面画线
  2. android 修改系统各种类型的声音的默认值和最大最小值
  3. SQL Server中实现二进制与字符类型之间的数据转换
  4. sqlserver中将varchar类型转换为int型再进行排序的方法
  5. SQL Server 游标语句 声明/打开/循环实例
  6. Sql学习第一天——SQL 将变量定义为Table类型(虚拟表)
  7. N字符在Sql Server字段类型中的重要性概述
  8. Sqlserver 表类型和表变量介绍
  9. sql将时间类型转换为字符串类型汇总

随机推荐

  1. Android 创建菜单栏
  2. relative相关属性
  3. android调用系统发短信界面功能
  4. ubuntu共享文件夹设置
  5. Drawable Mutations(Android(安卓)Drawab
  6. 【建议收藏】2020年中高级Android大厂面
  7. android学习资料
  8. Android 自动滚动的GridView
  9. android studio 报编码 GBK 的不可映射字
  10. Android APK安装失败,共享用户不兼容 INST