<?php $n1=$_POST['mont']; echo $n1; if($n1==07) echo "numeric"; if($n1=="07") echo "string"; if($n1==08) echo "numeric"; if($n1=="08") echo "string"; ?>
в этом случае, если $ _POST ["mont"] равно 07 вывод - и строка, и целое число но если $ _POST ["mont"] равен 08 вывод только строка
в чем может быть причина
Разве согласованность php не фантастическая? Та же проблема возникает и в JavaScript. Строка с начальным нулем приводится как восьмеричное (основание-8) число, поэтому «010» будет равно 8, но не «08».
Две причины:
PHP слабо типизирован, что означает, что нет разницы между строкой, содержащей число, и просто числом. "5" == 5
Числа, начинающиеся с 0, считаются восьмеричными. «08» не является действительным восьмеричным числом, поэтому его можно рассматривать только как строку.
Начальные нули на числах указывают восьмеричный формат. Восьмеричное число поднимается только до 7, поэтому 08 не будет действительным.
Это потому, что любое число, которому предшествует «0» в PHP, читается как восьмеричное число, поэтому «07» действительно означает 7 в 8, а не 10 (хотя они одинаковые). Поэтому «08» считается неверным как восьмеричное и не читается как число.