Странное сравнение и преобразование целочисленных строк PHP

Я работал над некоторым кодом для синтаксического анализа данных, но натолкнулся на следующее.

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

var_dump($line == $key);

Что ж, большинство из нас ожидает, что дамп выдаст ложное , но, к моему удивлению, дамп оказался истинным !

Я понимаю, что в PHP есть подобное преобразование типов:

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

Но почему сравнение, подобное тому, как я упомянул в первом примере, преобразует мою строку в целое число вместо преобразования целого числа в строку.

Я понимаю, что вы можете выполнить строгое сравнение === с моим примером, но я просто хочу знать:

  • Есть ли в документации PHP упоминание об этом поведении?
  • Кто-нибудь может объяснить, почему это происходит в PHP?
  • Как программисты могут предотвратить такую ​​проблему?
6
задан mauris 13 February 2012 в 08:50
поделиться