1

简单的东西,

这没有任何问题:

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

4

3 回答 3

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()

于 2013-10-09T08:46:26.367 回答
0

你不需要isset这里!isset用于安全地测试是否......嗯......一个变量存在。知道你的变量存在,因为你之前在行上声明了它。如果你想把它塞进一行,你甚至没有使用变量,你直接使用value。您只想将值与 进行比较false,您可以轻松地进行内联。

摆脱掉isset。并阅读PHP 的 isset 和 empty 权威指南

于 2013-10-09T08:47:06.197 回答
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 否则字符串将为空。

于 2013-10-09T09:23:04.833 回答