Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
Читаю мануал на php.net и в разделе "Операторы сравнения" наткнулся на один пример, который вгоняет меня в ступор: Код: php 1. Пример протестил, он рабочий. Читаю их объяснение, почему так: авторВ случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Ок, в примере выше мы сравниваем число со строкой. Соответственно, логично предположить, что при преобразовании строки "1e2" в число, на выходе должно получаться 100. Пробую сделать преобразование "руками": Код: php 1. 2. ПЕРВЫЙ ВОПРОС: в какой момент времени в примере из мануала 1 становится равна 100 ?!?!? Ещё одна странность: Код: php 1. 2. 3. В мануале черным по белому написано: авторесли сравнивать строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа ВТОРОЙ ВОПРОС: какого хрена, в таком случае, "213" != "213qwe" ?!?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 15:13 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
Климов Дмитрий, http://php.net/manual/ru/language.types.string.php#language.types.string.conversion ... Если строка не содержит какой-либо из символов '.', 'e', или 'E', и значение числа помещается в пределы целых чисел (определенных PHP_INT_MAX), строка будет распознана как целое число (integer). Во всех остальных случаях она считается числом с плавающей точкой (float). ... $str = "1e2"; echo ((float) $str);//100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 15:41 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
авторПЕРВЫЙ ВОПРОС: в какой момент времени в примере из мануала 1 становится равна 100 ?!?!? на момент вычисления == авторВТОРОЙ ВОПРОС: какого хрена, в таком случае, "213" != "213qwe" ?!?! потому что ты сравниваешь две строки, а строки не конвертятся в числа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 15:45 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
Климов Дмитрий, $foo = "213"; // string $bar = "213qwe3"; //string var_dump($foo==$foo); //bool(true) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 16:16 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
сорри. заглючила, отвлекли :) не обращайе плиз внимания :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 16:17 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
-k2-, $foo = "213"; // string $bar = "213e0"; //string var_dump($foo==$bar); //bool(true) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 16:18 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
ScareCrowпотому что ты сравниваешь две строки, а строки не конвертятся в числа А как же мануал: авторВ случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число Получается, что строка "123qwe" не считается строкой содержащей числа? -k2- спс за пояснение с экспонентой =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 16:36 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
[quot Климов Дмитрий]ScareCrowпотому что ты сравниваешь две строки, а строки не конвертятся в числа А как же мануал: авторВ случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число Получается, что строка "123qwe" не считается строкой содержащей числа? $foo = 213; // interger $bar = "213wef"; //string var_dump($foo==$bar); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 16:54 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
простите плиз опять. задергали седня :( $foo = 213; $bar = "213wef"; var_dump($foo==$bar); //bool(true) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 16:56 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
-k2-, в вашем примере всё ок до тех пор, пока $foo = 213, т.е. int. Как только становится $foo = "213", т.е. string, начинается то, чего я понять не могу о_0 Код: php 1. 2. 3. Код: php 1. 2. 3. P.S. у меня на локалхосте PHP 5.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 14:54 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
Климов Дмитрий, мой пример имел в виду, что неявного преобразования к числам не происходит, если сравниваются две строки как вам уже вчера сказали 17190212 попробуйте следующее, чтобы уж совсем наверняка :) $foo = "1"; // string $bar = "1 "; //string с пробелом var_dump($foo==$bar); //bool(false) к сожалению, не могу сейчас найти места в документации, где было бы черным по белому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:02 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
http://php.net/manual/en/types.comparisons.php таблица "Loose comparisons with ==" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:13 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
ScareCrow, я эту таблицу имела в виду, но там как бы железного варианта нет :) если смотреть например "1"/"0" неявное преобразование тоже привело бы к false автор просто не используйте скользких конструкций, не уверены - приводите явно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:39 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
ScareCrow, спасибо за ссылку на таблицу. -k2-, я бы рад не использовать.. К Zend сертификации готовлюсь =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2015, 15:47 |
|
||
|
Сравнение строк
|
|||
|---|---|---|---|
|
#18+
-k2-Климов Дмитрий, мой пример имел в виду, что неявного преобразования к числам не происходит, если сравниваются две строки как вам уже вчера сказали 17190212 попробуйте следующее, чтобы уж совсем наверняка :) $foo = "1"; // string $bar = "1 "; //string с пробелом var_dump($foo==$bar); //bool(false) к сожалению, не могу сейчас найти места в документации, где было бы черным по белому Если строка не содержит какой-либо из символов '.', 'e', или 'E', и значение числа помещается в пределы целых чисел (определенных PHP_INT_MAX), строка будет распознана как целое число (integer). Во всех остальных случаях она считается числом с плавающей точкой (float). Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение - это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами. found что и проиходит. страка вида <верное_число><Белиберда> ->>> превращается в <верное_число> целое/дробное как описанно выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 13:38 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=68&tid=1462033]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
110ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 430ms |

| 0 / 0 |
