奇怪的PHP字符串整数比较和转换

mau*_*ris 6 php string types integer

我正在研究一些数据解析代码,而我遇到了以下内容.

$line = "100 something is amazingly cool";
$key = 100;

var_dump($line == $key);
Run Code Online (Sandbox Code Playgroud)

好吧,我们大多数人都希望转储产生一个false,但令我惊讶的是转储是一个true!

我明白在PHP中存在类似的类型转换:

$x = 5 + "10 is a cool number"; // as documented on PHP manual
var_dump($x); // int(15) as documented.
Run Code Online (Sandbox Code Playgroud)

但是为什么我在第一个例子中提到的比较将我的字符串转换为整数而不是将整数转换为字符串.

我明白你可以===对我的例子做一个严格的比较,但我只是想知道:

  • PHP文档中是否有任何部分提及此行为?
  • 任何人都可以解释为什么在PHP中发生?
  • 程序员如何防止这样的问题呢?

the*_*inX 4

如果我记得正确的话,PHP 将这两个变量“转换”为尽可能低的类型。他们称之为类型杂耍。

尝试:var_dump("something" == 0); 例如,这会给你 true 。。它以前咬过我一次。

更多信息: http: //php.net/manual/en/language.operators.comparison.php