LINUX.ORG.RU

Странное поведение при сравнении чисел как строк

 ,


2

1

Почему в результате работы такого кода:

<?php if ((string)'1.0' == (string)'1') echo ('True'); ?>
выведется True, несмотря на явное указание типа данных? Если == заменить на === то всё работает как задумано (True не выводится), но хотелось бы узнать причину такого поведения.

http://www.php.net/manual/ru/language.operators.comparison.php

В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.

Munhgauzen
()
Ответ на: комментарий от Munhgauzen

Спасибо за пояснение. Т.е. явное указание типа string в данном случае не играет никакой роли, так как строки автоматом приводятся к числам?

wintrolls ☆☆
() автор топика
Ответ на: комментарий от wintrolls

сначала ты приводишь '1.0' и '1' к типу string, передаёшь в качестве аргументов к оператору ==, который всё это дело приводит к численному типу.

gorilych ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.