PHP7函数返回值类型浅谈

php7新特性

Posted by hughnian on December 24, 2019

PHP7函数返回值类型浅谈

函数返回值类型确定

PHP7的性能和新特性使得越来越的开发者开始使用PHP7来搭建系统。目前我最常用的一个新特性是函数返回值类型声明。函数返回类型声明这个特性,相信很多写过C或者Golang的人都很熟悉。 因为在那些语言都是强类型,函数的返回必须声明类型。现在PHP7也具有这个特性了,还是有些小激动的。 我们在使用时一般都是定义确定的返回的类型,最近在使用PHP7函数返回类型时遇到个小玩意,如下

  • 代码1

public function getCount() :int
{
    return self::where("id" => 1)->count();
}

  • 代码2
public function getCount() :bool
{
    return self::where("id" => 1)->count();
}

这个两个代码内容基本都是一样的,唯一不同就是返回值类型定义的不同,所以理论上count返回的数量就不一定就是返回数量了。上面的代码1 将会返回count的数量,而代码2就不会返回数量而是返回bool值的true或false。这个小小的不同会影响你对count值的判断,因为我有一次就是把返回值类型写成了bool(可能一开始只是想判断是否存在) 但我是想获取count数量的,发现怎么都不返回数量而是一直都是1,其实就是true。所以对于这个函数返回值类型要注意,不是说写在那当摆设的,是有严格类型定义的。对于PHPer处理弱类型习惯了的话,需要留点意。

函数返回值类型不确定

当然有时候我们的函数返回值类型可能不确定或者多个类型,相较于Golang函数可以返回多个不同类型的值。PHP7的函数返回值不能返回多个不同类型的值 如果是多个值我们可以考虑使用返回array。如果函数没有返回类型,我们可以定义为void类型,定义这个类型是可以省略函数中的return。如果函数的返回类型有可能是具体的某个类型,又有可能是null的话, 我们可以定义为那个类型前加个?,如?int,?string,?array。我们可以写成这样

public function getName(): ?string
{
    return $this->name; // name可以为null
}

最后今天是平安夜,祝大家平安夜快乐~!