【问题标题】:Server requires PHP strict comparison but not on localhost服务器需要 PHP 严格比较,但不是在 localhost
【发布时间】:2015-08-18 03:58:20
【问题描述】:

我在比较运算符方面遇到了一个奇怪的问题。

在我的本地主机上,这段代码运行良好:

$variable = 2;
if($variable == 2){
  echo 'hi';
}
if($variable == '2b'){
  echo 'bye';
}
//returns 'hi'

但在我的服务器上,它返回“再见”,除非我使用严格 (===) 运算符。

有什么办法可以改变这个,让我的服务器也返回'hi'?

【问题讨论】:

  • 有什么理由不能使用严格的比较运算符?
  • 我可以,但我真的很想知道为什么它不起作用。
  • @Robbie 尝试 var_dump $variable 看看它是什么
  • @Robbie 在逻辑上$variable 的值在本地和服务器上是不一样的。 == 的行为不会随着 php 版本/环境/操作系统等而改变。

标签: php comparison-operators


【解决方案1】:

这是因为 php 尝试将 (int) 转换为您的字符串,因为您将 intstring 进行比较,因此您的 if 块将是

if($variable == (int) '2b'){

所以当投射到它时,(int) '2b' 将只有2。 如果你使用===它的工作原理,那就是检查它是否是相同的类型。

【讨论】:

    【解决方案2】:

    过去我也遇到过类似的情况。这很愚蠢,但请确保您在两台服务器上运行相同的 PHP 版本。

    无论哪种方式,您的生产服务器都可以正常工作,但您的本地服务器却不能。测试:

    echo 2 == '2b' ? 'true' : 'false'; // true
    echo 2 == 'b2' ? 'true' : 'false'; // false
    

    如果字符串以数字开头,它将被“转换”为数字。

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2015-10-14
      相关资源
      最近更新 更多