function file_get_contents_new($url, $wait = 3) {
if (http_response($url, '200', $wait)) {
return file_get_contents($url);
} else {
return FALSE;
}
}
function OO_chart($query_stub, $length)
{
$key = $this->OO_charts_key;
$url_api = "https://api.oocharts.com/v1/query.jsonp?query={$query_stub}&key={$key}&start={$length}";
$json = file_get_contents_new($url_api);
if (file_get_contents_new($url_api) ? (string) true : (bool) false && (bool) $this->OO_active) {
return json_decode($json, TRUE);
} else {
$msg = new Messages();
$msg->add('e', 'JSON error. Check OOcharts api.');
redirect('index.php');
}
}
file_get_contents_new($ url_api)? (字符串)true :( bool)这样的假工作?
如果函数输出true
,它将评估为string
,
如果函数是false
,它会评估为bool
吗?
答案 0 :(得分:2)
否即可。您尝试在if(){}else{}
语句中键入juggle(切换变量的数据类型)。
执行此操作的正确方法是将if语句更改为以下内容:
if (is_string(file_get_contents_new($url_api)) && is_bool($this->OO_active)) {
return json_decode($json, TRUE);
} else {
$msg = new Messages();
$msg->add('e', 'JSON error. Check OOcharts api.');
redirect('index.php');
}
现在,正如您所见,我在PHP中使用了is_bool()
和is_string()
函数。如果函数file_get_contents_new
返回一个字符串,它将评估为true,并检查$this->OO_active
是否为布尔值。如果您的file_get_contents_new
函数返回一个布尔值(意味着它不是一个字符串),它将立即执行您的else{}
语句,因为您的if
条件都必须为真(因为{ {1}} / &&
运算符),如果其中一个条件返回false,或者断开链,它将移至and
语句。
答案 1 :(得分:1)
不,那不行。翻译回正常if / else它更容易解释为什么这不起作用:
if( !file_get_contents($file) ){
// the file_get_contents function returned false, so something went wrong
}
else{
// the if-condition was not met, so the else will do its job
// The problem is that we got the content in the if-condition, and not in a variable
// therefor we can not do anything with its contents this way
echo "It did work, but I have no way of knowing the contents";
}
解决方案可能是这样的:
$content = file_get_contents($file);
$content = $content===false ? 'No content' : $content; // rewrite if file_get_contents returns false
对三元检查要小心,使用三等号。在一些奇怪的情况下,文件的内容可能是“错误的”。检查$content==false
是否会返回true,因为它具有相同的值(但不是相同的类型(字符串/布尔值)
答案 2 :(得分:0)
file_get_contents_new()
返回读取数据或失败时返回FALSE。
http://php.net/manual/en/function.file-get-contents.php
那为什么会让事情复杂化?这应该工作。但只有一种方法可以找到......
$contents = file_get_contents_new($url_api);
if (($contents!==false) && (bool) $this->OO_active) {
return json_decode($json, TRUE);
}
我也不喜欢(bool
)作业。那个参数不应该是boolean
吗?
并回答你的问题 - 是的,if语句中的三元运算符应该有效。但是,测试,调试,维护和使代码的可读性降低是很困难的。我不喜欢这样使用它。