首页 > 解决方案 > 使用合并运算符和函数调用的最简单方法

问题描述

我想简化我的 PHP 代码,虽然我发现 coalesce 运算符非常有用,但我不知道在从对象调用函数时是否/如何使用它。

例如,

$message = $error_msg ?? 'No error message';

有效,但是:

$message = $exception->getMessage() ?? 'No error message';

没有。我最终不得不求助于:

$message = isset($exception) ? $exception->getMessage() : 'No error message';

有什么方法可以使第二行代码起作用,还是第三个示例是唯一的方法?

对于不知道提出此类问题的正确术语,请提前道歉。这可能是我找不到答案的原因。

编辑:我写的代码只是一个例子;这是一个普遍的问题。例如,假设我有一个用于创建和编辑用户的模板。User 对象有一个 getName() 函数来返回他们的名字。

创建新用户时,“名称”输入应为空。编辑用户时,“姓名”输入应填写用户名。当然,$user 不是设置在前者上,而是设置在后者上。

拥有<input value="<?php $user->getName() ?? '' ?>">将是完美的,但会引发错误。<input value="<?php isset($user) ? $user->getName() : '' ?>">工作,但我发现前者更具可读性,所以我想知道是否有办法让它工作。

我知道这$user->name ?? ''行得通,但对于某些数据功能是必要的/可取的。

标签: php

解决方案


那个问题??和 ?工作不如你预期;

见例子:

<?php

$string = "";

var_dump($string ?? 'ups');  // output ""
var_dump($string ? $string : 'ups');   //output "ups"

空合并运算符 (??) 已添加为语法糖,用于需要与isset(). 如果存在且不为 NULL,则返回其第一个操作数;否则返回第二个操作数。手动的

所以这意味着:

$string ?? 'ups'等于isset($string) && $string !== null哪个对于空字符串为真

$string ? $string : 'ups'等于$string == true ? $string : 'ups'哪个对于空字符串为假


推荐阅读