0

我有一个if声明,我可以用两种方式写它:

1.  echo $danceInfo->getSearchingGigDes() ? $danceInfo : 'n/a';

or

2.  if ($danceInfo){ echo $danceInfo->getSearching(); }else{ echo 'n/a'; }

第一个似乎不起作用,我不明白为什么??!

我也试过:

1.  echo $danceInfo->getSearchingGigDes() ? isset($danceInfo) : 'n/a';

但它也不起作用。

有任何想法吗?

..我的意思是,我可以使用第二个选项,但我很好奇为什么它不起作用。

谢谢

4

3 回答 3

2

也许你想要

 echo (($danceInfo) ? $danceInfo->getSearching() : 'n/a');
于 2012-03-09T06:10:25.337 回答
1

第一个应该是

echo $danceInfo ? $danceInfo->getSearchingGigDes() : 'n/a';
于 2012-03-09T06:11:31.163 回答
1

首先,这两个不同的条件是如何工作的?构造

X1 ? Y1 : Z1;

是写成表达式的条件,其中表达式是计算结果为值的东西,并且可以是更大表达式的一部分。另一方面,

if (X2 {
   Y2;
}
else {
   Z2;
}

是一个语句,是一个完整的“代码行”,它做某事(例如影响状态)并且不能嵌入到更大的表达式中。

在这两种情况下,X1 和 X2 都是条件 - 需要评估为布尔值以决定采用哪个分支的子表达式。PHP,与其他主要语言一样,允许一定数量的隐式类型转换,因此如果 X1 和 X2 不计算为布尔值 TRUE 或 FALSE,而是一些其他内置类型(如字符串或数字) ,然后使用定义明确的规则将它们的值转换为布尔值。例如,数字零转换为 FALSE,任何非零值转换为 TRUE。对于字符串,空字符串(或 null)被视为 FALSE,而其他任何内容都被视为 TRUE。

在上面的代码中,两个条件的条件子表达式完全不同,因此您不应期望它们产生相同的结果。首先,条件是将字符串回显到输出的结果 - 因此决定采用哪个分支的布尔值将从'echo'的返回值转换。echo (http://php.net/manual/en/function.echo.php) 有 void 返回类型,所以我认为它应该总是评估为假。在第二个条件中,您使用 $displayInfo 的值 - 如果这是非空、非零或非空字符串,这将评估为 TRUE,您将看到 echo 表达式的输出,否则您将看到 '输出上的 n/a'。

于 2012-03-09T08:18:49.147 回答