使用三元运算符在 php-isset 中使用函数
Posted
技术标签:
【中文标题】使用三元运算符在 php-isset 中使用函数【英文标题】:use functions in php-isset with ternary operator 【发布时间】:2013-10-16 12:28:21 【问题描述】:简单的东西,
这没有任何问题:
$openMonday = rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':');
$business->openingTimes['monday'] = isset($openMonday) ? $result['opening_hours']['periods'][1]['open']['time'] : '';
但我不想为此写两行,因为那样我就必须在所有其他营业时间都这样做。
为什么我不能写
$business->openingTimes['monday'] = isset(rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':')) ? $result['opening_hours']['periods'][1]['open']['time'] : '';
我总是收到期望变量的错误。如何通过三元运算符使用 isset 中的方法?
【问题讨论】:
如果您需要在所有其他营业时间都这样做,您应该尝试使用它!这样就可以写成两行了,调用的时候更简洁。 【参考方案1】:这里的问题是isset()
不是一个真正的函数,而是一个语言结构,它要求它的参数是变量,否则它会发出语法错误。
另见手册条目:http://php.net/manual/en/function.isset.php
无论如何,正如@deceze 所说,您可能不想在这里使用isset()
,因为它用于检查变量是否存在。
在这种情况下,你可以使用empty()
,所以不要写
$openMonday = rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':');
$business->openingTimes['monday'] = isset($openMonday) ? $result['opening_hours']['periods'][1]['open']['time'] : '';
你可以的
$openMonday = rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':');
$business->openingTimes['monday'] = !empty($openMonday) ? $result['opening_hours']['periods'][1]['open']['time'] : '';
而且您不必担心不惜一切代价使其成为单线!而是创建一个函数,然后在需要时调用它...但是如果您仍然想内联,那么您可以这样做
$business->openingTimes['monday'] = !empty(rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':')) ? $result['opening_hours']['periods'][1]['open']['time'] : '';
请记住,以上要求至少 PHP 5.5!
最后,上面一行可以写成
$business->openingTimes['monday'] = !rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':') ? $result['opening_hours']['periods'][1]['open']['time'] : '';
不需要isset()
也不需要empty()
【讨论】:
为什么投反对票?这回答了OP问题!在这种情况下,他/她不应该使用isset()
是另一回事......
如果 OP 走向完全错误的方向,您会发现建议他更新他的 PHP 版本而不是指出他走向错误的方向更有用?
@deceze 恕我直言,这是另一回事,但这个答案本身并没有错:他问为什么 isset() 失败,我告诉了他。
@deceze 添加了一个更好的示例,它不使用 isset() 并解释了为什么它是错误的,就像你所做的那样。
为什么empty
在这里更可取?【参考方案2】:
这里不需要isset
! isset
用于安全地测试是否......好吧......变量存在。你知道你的变量存在,因为你在之前的行中声明它.如果你想把它合并到一行中,你甚至没有使用变量,你直接使用 value。您只想将值与 false
进行比较,您可以轻松地进行内联。
只需摆脱isset
。并阅读The Definitive Guide To PHP's isset And empty。
【讨论】:
我理解你的意思,但这仍然不能回答我的问题,即如何通过使用 isset 中的函数将所有代码仅写在一行中,除了两行。因为,我不知道是否给出了 opening_hours 所以我想这样做:isset($result['opening_hours']['periods'][2]['open']['time']) ? $result['opening_hours']['periods'][2]['open']['time'] : '';
但是,我得到了这种格式的数字0000
并且需要将其转换为 00:00 - 这就是为什么我在问。上面只是一个例子,它是如何工作的,但我不希望它工作。
请给出一个清晰的例子,说明您的数据是什么样子或可能是什么样子,以及您期望的结果是什么。如果我们要做的只是一个过于复杂的错误代码示例,那么就很难建议合适的代码来处理您的数据。【参考方案3】:
解决方案
$business->openingTimes['monday'] = isset($result['opening_hours']['periods'][1]['open']['time']) ? rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':') : '';
解释我做了什么。我问是否设置了变量,如果设置了,则使用方法 chunk_split 否则字符串将为空。
【讨论】:
以上是关于使用三元运算符在 php-isset 中使用函数的主要内容,如果未能解决你的问题,请参考以下文章