我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

一个小小的问号,也是php8的一个新特性。本文主要讨论的php8中的单问号空运算符是如何使用的,这个空运算符的使用,不同于已知的三目运算,也不同于js中的双问号空运算符,有着其自己的独到逻辑。

苏南大叔:php8新特性,如何理解使用单问号空运算符? - php8单问号空运算符
php8新特性,如何理解使用单问号空运算符?(图4-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码感悟。本文测试环境:win10nginx@1.15.11php@8.2.10-nts

对比项,三目运算符/双问号运算

php的三目运算符,里面也有个问号,例如:

$a = ($name=="苏南大叔")?"ok":"sorry";

苏南大叔:php8新特性,如何理解使用单问号空运算符? - 三目运算符
php8新特性,如何理解使用单问号空运算符?(图4-2)

JavaScript最新标准里面,也增加了个双问号空值判断运算符【注意:不是php,是js/node】,例如:

sn = null ?? "苏南大叔";  // 苏南大叔

单问号空运算

这个php8 新增的单问号空运算,看起来很像是没写后半部分的三目运算符号。

x = y ? z运算;

三目运算本质上是赋值,而新的这个问号空运算符,本质上是要执行运算。y为空,则xnull,不再执行后续的z运算。不为null,则继续执行z运算

如果把z写成字符串的话(就是说:按着三目运算符理解的话),直接报错。

Parse error: syntax error, unexpected token ";" 

苏南大叔:php8新特性,如何理解使用单问号空运算符? - error错误发生
php8新特性,如何理解使用单问号空运算符?(图4-3)

测试代码

php8的最新特性,单问号空运算符的测试代码如下所示:

class Blog{
    public function __construct(public string $domain){

    }
    public function getUrl(){
        return "https://".$this->domain."/";
    }
}
class SuNan{
    public function __construct(public string $name,private string $domain){
        $this->Blog = new Blog($domain);
    }
    public function getBlog(){
        return $this->name == "苏南大叔" ? $this->Blog : null ;
    }
}

$ss = new SuNan(domain:"newsn.net",name:"苏南大叔");
$nn = $ss->getBlog()?->getUrl();

$ss2 = new SuNan("sunan大叔","newsn.com.cn");
$nn2 = $ss2->getBlog()?->getUrl();

var_dump($nn);
var_dump($nn2);

苏南大叔:php8新特性,如何理解使用单问号空运算符? - 空值运算符
php8新特性,如何理解使用单问号空运算符?(图4-4)

输出:

string(18) "https://newsn.net/"
NULL

表格对比

语言项目例子解释
php/js三目运算a?b:ca为真?则返回b
js空值合并运算a?ba为null?则b为默认值
php空运算符a?->ba为null?则返回null,不继续执行b操作

猛地看上去,

  • jsphp的问号逻辑是完全相反的。
  • js中是个赋值操作,而php中是个运算操作。

相关文章

结束语

更多苏南大叔写过的php经验文章,请点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php