Почему строка равна целому 0 в PHP? - PullRequest
0 голосов
/ 12 ноября 2018

В php 7 я сделал это. Вывод должен быть 0, верно? Но я получаю 1. Почему это?

 <?php
     echo "a"==0?1:0;
    ?>

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Документы php7 объясняют все случаи здесь . Также точно ваш пример.

var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
0 голосов
/ 12 ноября 2018

"a" == 0 оценивается как true.

Потому что любой string is converted into an integer when compared with an integer. Если PHP не может правильно преобразовать строку, то она оценивается как 0. Таким образом, 0 равно 0, что равно true.

Если вы хотите получить ответ 0 ,

Вы должны использовать === вместо ==,

Потому что обычный оператор не сравнивает типы. Вместо этого он попытается выполнить типизацию предметов.

Между тем === принимает во внимание тип предметов.

=== означает «равно»,

== означает "ээээ .. вроде как"

Также руководство по PHP для сравнения http://au.php.net/manual/en/language.operators.comparison.php

// double equal will cast the values as needed followin quite complex rules
0 == '0' // true, because PHP casted both sides to numbers

// triple equals returns true only when type and value match
0 === '0' // false

К вашему сведению, из руководства по PHP:

Преобразование строки в числа

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

Строка будет оценена как число с плавающей запятой, если она содержит какие-либо символы '.', 'E' или 'E'. В противном случае оно будет оцениваться как целое число.

Значение задается начальной частью строки. Если строка начинается с допустимых числовых данных, это будет используемое значение. В противном случае значение будет 0 (ноль). Допустимые числовые данные - это необязательный знак, за которым следуют одна или несколько цифр (необязательно содержащих десятичную точку), за которыми следует необязательный показатель степени. Экспонента представляет собой «е» или «Е», за которыми следуют одна или несколько цифр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...