【发布时间】:2015-03-19 16:50:51
【问题描述】:
我有一个执行此操作的 php 代码:
if (file_get_contents($businessData['header_image'],0,null,0,1) !== false) {
$headerBackingImage = $businessData['header_image'];
}
else {
$headerBackingImage = "default_image_url.jpg";
}
目的是确定企业在定义的位置是否有有效的图像文件,然后在网页中使用该文件 URL。 $businessData 是来自数据库的输出数组。
我发现对于某些数据库行,$businessData['header_image'] 值为空,这会导致警告:
PHP 警告:file_get_contents():文件名不能为空
很明显,上述语句的前导是检查$businessData['header_image'] 是否为空。使用 PHP empty() 函数轻松完成。
我可以将其结构如下:
if (!empty($var)){
if (file_get_contents($var)){
///file exists!
}
else {
///file does not exist, use default.
}
}
else {
///file does not exist, use default.
}
但这意味着在 IF EMPTY 检查内外重复else 子句。
我的问题
那么 - 这个布局如何维护单个 IF{...} 语句而不需要重复 ELSE{...} 子句:
if (!empty($businessData['header_image']) && file_get_contents($businessData['header_image'],0,null,0,1) !== false){ ... }
那么,如果第一个条件返回 FALSE,PHP 是否会检查 IF 语句中的第二个条件?
上述解决方案是否仍会返回警告,因为即使在将第一个 --empty()- 函数评估为 FALSE 之后,PHP 仍会运行 file_get_contents 函数?
我从 php.net 和其他地方读到的关于这个的东西似乎只将 IF 条件评估为单个返回块,因为括号之间的整个块返回 TRUE 或 FALSE,而不是 PHP 如何处理每个子部分IF 条件分别返回 TRUE 或 FALSE。
【问题讨论】:
-
测试一下,你就会发现。 :)
-
@ClémentMalet 非常正确,但我认为这也是 IF 语句动态的一个有趣问题,并且在互联网上的一些搜索发现很少能告诉我原则上的答案。
标签: php if-statement boolean