Почему PHP конвертирует строку в целое число? - PullRequest
3 голосов
/ 21 апреля 2011

Я хотел бы знать, при каких условиях PHP решает, когда конвертировать из String в Integer и наоборот

Пример:

$key = 0;
$test = 'teststring';
if($key == $test) {
    echo "Why, tell me why!";
}
else {
    echo "That's the way love goes...";
}

Я знаю, что должен использовать '=== ', чтобы получить лучшие результаты, но мне любопытно узнать, почему PHP решает преобразовать строку в целое число, а не наоборот.

Ответы [ 4 ]

5 голосов
/ 21 апреля 2011

Из руководства по PHP:

тип переменной определяется контекстом, в котором используется переменная.То есть, если строковое значение назначено переменной $ var, $ var становится строкой.Если целочисленное значение затем присваивается переменной $ var, оно становится целым числом.

См. Тип Жонглирование и Сравнительная таблица типов и Преобразование строк в числа для деталей:

Если строка не содержит символов «.», «E» или «E» и числовое значение соответствует ограничениям целочисленного типа (как определено в PHP_INT_MAX), строка будет оцениваться как целое число.Во всех остальных случаях он будет оцениваться как число с плавающей запятой.

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

И глава о строках:

Целое число или число с плавающей точкой преобразуется в строку, представляющую число в текстовом виде (включая часть экспоненты для чисел с плавающей точкой).Числа с плавающей запятой могут быть преобразованы с использованием экспоненциальной записи (4.1E + 6).

А также (хотя уже был задан deceze) глава об операторах сравнения :

Если вы сравниваете число со строкой илисравнение включает числовые строки, затем каждая строка преобразуется в число, и сравнение выполняется численно.

4 голосов
/ 21 апреля 2011

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

http://php.net/manual/en/language.operators.comparison.php

Для различных типов сравнение выполняется согласно следующей таблице (по порядку).

Operand 1           Operand 2

null or string      string              Convert NULL to "", numerical
                                        or lexical comparison
...

string, resource    string, resource    Translate strings and resources
or number           or number           to numbers, usual math

Обратите внимание, что часть "по порядку" важна при чтении этой таблицы.

0 голосов
/ 21 апреля 2011

Из руководства

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

Если строка не содержит ни одного изсимволы '.', 'e' или 'E', а числовое значение соответствует ограничениям целочисленного типа (как определено в PHP_INT_MAX), строка будет оцениваться как целое число.Во всех остальных случаях он будет оцениваться как число с плавающей запятой.

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

0 голосов
/ 21 апреля 2011

Потому что так они разработали язык, как описано здесь .

...