【问题标题】:PHP Statement always return falsePHP 语句总是返回 false
【发布时间】:2015-08-11 09:53:22
【问题描述】:

我有一个小脚本,它使用 omdbapi 从 IMDB 获取数据。 我已经设法从该站点获取数据,但是当我尝试检查电影海报是否有效时,它总是返回 false。

            if(!$info['Poster'] == "N/A") {
                $url = $info['Poster'];
                $img = 'images/'.$info["imdbID"].'.jpg';
                file_put_contents($img, file_get_contents($url));
                echo 'Downloaded';
            } else {
                echo '!Downloaded';
                $noCover = true;
            }

$info['Poster'] 包含与此类似的数据: http://ia.media-imdb.com/images/M/MV5BMTM0MDgwNjMyMl5BMl5BanBnXkFtZTcwNTg3NzAzMw@@._V1_SX300.jpg

前段时间还在工作,但不知何故停止了......

【问题讨论】:

  • 停止链接处理外部资源的函数调用。您的代码假定任何事情都不会出错。 $temp = file_get_contents(...); verify_that_it_worked(); file_put_contents(...).
  • 除了下面的答案,请检查:php.net/manual/en/language.operators.precedence.php! 优先于 ==,因此将首先评估 !$info['Poster']

标签: php imdb


【解决方案1】:

只需将! 从您的条件中移出,它应该可以按预期工作。您在询问 $info['Poster'] 是否为假,它不会是假的,因为它会有一个字符串值。因此,您将布尔值与字符串值进行比较,false 将始终不同于 "N/A:

        if($info['Poster'] !== "N/A") {
            $url = $info['Poster'];
            $img = 'images/'.$info["imdbID"].'.jpg';
            file_put_contents($img, file_get_contents($url));
            echo 'Downloaded';
        } else {
            echo '!Downloaded';
            $noCover = true;
        }

【讨论】:

  • 你没有解释为什么这有帮助
  • 稍微解释一下。
【解决方案2】:

你的 if 语句写错了。 !$info['Poster'] 表示 if $info['Poster'] is not true。如果有一个值,它将被转换为false,因为PHP 的类型杂耍将任何非空字符串转换为true,而! 运算符将其设为假。 false 不等于 N/A,因为类型杂耍将其转换为 true(非空字符串始终为 true)。 false 不等于 `true。

你的意思是使用!=,这意味着not equal to

if($info['Poster'] != "N/A") {

【讨论】:

  • 哦,天哪……我怎么能错过呢?但是当时怎么可能呢?
  • 你有过这样的经历吗? if(!($info['Poster'] == "N/A")) { 因为那样也可以。
  • 是的,如果你尝试 if(!($info['Poster'] == "N/A")) 这也可以,但最好的做法是 @john conde 完成
  • 我同意@AmanRawat,我个人永远不会像我上面评论的那样写它;但是 OP 说它曾经可以工作,我怀疑那些括号曾经存在并被删除,因为人们认为它们没有用。
  • 也许就像@AmanRawat 说的,我不知道。也许我累了并删除了它们...无论如何,谢谢大家帮助初学者:)
猜你喜欢
  • 2020-08-09
  • 2019-05-11
  • 1970-01-01
  • 2020-12-27
  • 2014-08-26
  • 2012-08-23
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多