php - 使用合并运算符和函数调用的最简单方法
问题描述
我想简化我的 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
$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'
哪个对于空字符串为假
推荐阅读
- laravel - npm 运行构建缺少脚本
- triggers - ST PLC 编程:检测上升沿并记住其值
- java - 单击listview项目android studio后显示fab按钮
- flutter - Flutter:当我抛出异常时,构建器在未来的构建器中调用了两次
- r - 用 r 中的 DataFrame 中的 if-else 替换 NA
- python - 是否可以仅使用 STFT 频谱图的图片来进行声音重建?
- javascript - 如何在按钮单击操作开始之前为 onblur 验证设置超时/间隔以完成?
- javascript - Zabbix 使用 javascript for 循环预处理项目
- python - 我找不到使用 python selenium 输入文本的元素
- amazon-s3 - 每当我将图像上传到 S3 AWS 时,如何设置“始终公开图像”?