假设我想检查几个不同的参数,然后返回到默认值,有没有一种方法可以做到这一点,而不需要丑陋和冗长的isset()
编写?
例如,在JS中,我们可以这样做:var someVariable = otherVar || anotherVar || 'fallback here';
个
PHP中的等价物是这样的:$someVariable = (isset($otherVar) ? $otherVar : (isset($anotherVar) ? $anotherVar : 'fallback here'));
个
这显然是一个混乱和可怕的阅读。
对于单个回退存在许多解决方案,即:$someVariable = $otherVar ?: 'fallback here';
个
但这并不能帮助我在检查线上需要多个人。
考虑到我只对值是否为set或truth-y感兴趣(即我很高兴接受1作为使用值,跳过0/false/null并使用链中的下一个参数),避免未定义索引警告的最佳方法是什么?
实际上,我会在 * 大多数 * 情况下对数组执行此操作,但不是所有情况,而且它们可能是不同的数组。例如,我可能希望首先使用$_POST,然后在不同的键下检查$_GET,然后回退到默认字符串。
4条答案
按热度按时间g9icjywg1#
忽略PHP警告和注意事项根本不是一个好主意。
但只是为了实验,我可以建议你使用错误控制运算符
@
。PHP支持一个错误控制操作符:at符号(@)。当在PHP中添加到表达式之前时,该表达式可能生成的任何错误消息都将被忽略。
字符串
http://php.net/manual/en/language.operators.errorcontrol.php
dy2hfwbg2#
您可以链接
?:
,但仍需要将suppress errors与@
链接。例如,以下代码的工作方式与您的JavaScript示例类似:
字符串
这相当于多个“单一回退”:
型
不过要小心,
?:
只检查 truthyness。在某些情况下,isset()
和truthyness do not agree。此外,PHP 5.3中引入了?:
回退功能。如果你只关心空值并且PHP 7可用,它引入了null coalescing operator。
n3schb8v3#
这是模糊的,它是不可取的...
字符串
所以,你有两种分组的选择:
型
哪一个是正确的?让我们来测试一下...
型
**结果:**V2正确。
型
相当于...
型
uoifb46i4#
如果你想替换
isset
和三进制,你可以使用null合并运算符??
,也就是added in PHP 7.0:字符串
像
isset
一样,它只检查值是否为null(或者变量/键不存在),所以可能会返回假值:型
如果你确定变量/键存在,但不想得到一个假值,你可以连续多次使用
?:
:型