在三元运算符的php-isset中使用函数

时间:2013-10-09 08:44:34

标签: php function ternary-operator

简单的东西,

这没有任何问题:

$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中使用方法?

3 个答案:

答案 0 :(得分:3)

这里的问题是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()

答案 1 :(得分:0)

这里不需要issetisset用于安全地测试是否......好吧...... 一个变量存在。知道你的变量存在,因为你在它上面声明它以前行。如果你想把它变成一行,你甚至不使用变量,你直接使用。您只想将值与false进行比较,您可以轻松地将其内联。

摆脱isset。并阅读The Definitive Guide To PHP's isset And empty

答案 2 :(得分:0)

<强>解

    $business->openingTimes['monday']       = isset($result['opening_hours']['periods'][1]['open']['time']) ? rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':') : '';

解释我的所作所为。我询问是否设置了变量,如果是,则使用chunk_split方法,否则字符串将为空。