我今天在一些PHP代码中看到了这个:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
Run Code Online (Sandbox Code Playgroud)
我不熟悉?:
这里使用的运算符.它看起来像一个三元运算符,但是省略了判断谓词是否为真的表达式.这是什么意思?
根据此页面中的示例,我在下面提供了工作和非工作代码示例.
工作代码使用if
声明:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Run Code Online (Sandbox Code Playgroud)
使用三元运算符的非工作代码:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud)
更新
在Brian的小费之后,我发现回声$test
输出了预期的结果.以下作品就像一个魅力!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud) 我怀疑它是不允许的,因为我得到"解析错误:语法错误,意外的T_IF in ..."错误.但我无法找到实现目标的方法.这是我的代码:
<?php
$countries = $myaddress->get_countries();
foreach($countries as $value){
echo '<option value="'.$value.'"'.if($value=='United States') echo 'selected="selected"';.'>'.$value.'</option>';
}
?>
Run Code Online (Sandbox Code Playgroud)
它的作用是在选择元素中显示国家/地区列表,并将美国设置为默认值.我伤心地工作......
甚至用于告诉我们PHP"短标签"(<? /*...*/ ?>
)的官方文档都是"糟糕的".然而,由于PHP 5.4,该echo
品种<?= /*...*/ ?>
被永久不管启用short_open_tag
设置.
改变了什么?
即使之前因为short_open_tag
在共享托管平台上是否启用了不可预测的特性而不鼓励他们,当然这个论点不会因为某些子主机将运行PHP 5.4而消失?
可以说,对语言的这种改变本身并不意味着我们应该避免使用"短标签"的建议的变化,但如果他们遇到了麻烦,那么看起来PHP开发人员似乎不再"讨厌"他们许多.对?
我现在可以得出的唯一合乎逻辑的结论是,在PHP 5.4中引入这一变化必须有一些客观的理由.
它是什么?
我很难理解这里描述的if/else的php缩写是如何工作的.
<?=(expression) ? $foo : $bar?>
Run Code Online (Sandbox Code Playgroud)
我试图缩短的表达如下:
if (isset($result[1][0])) {
$var = $result[1][0];
} else {
$var = "";
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释我如何在我的情况下应用速记if/else语句吗?
谢谢 !