неожиданное поведение php

135
14 сентября 2017, 18:27

доброго времени суток. объясните, пожалуйста, почему

var_dump("любая строка" == 0);

возвращает

bool(true)

при этом если 0 привести к строковому или булеву типу, либо использовать жёсткое сравнение, то условие отрабатывает нормально(false). как так получается что 0 равен любой строке? php 5.6.30

Answer 1

Документация

В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа.

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

Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль).

Соответственно при сравнении "строка" == 0, строка преобразуется в число 0

Answer 2

Потому что "любая строка" приводится к int. А int от неё - 0.

Но 0 равен не любой строке. Попробуйте "123любая строка"

Жесткое сравнение сначала сравнивает типы.

Answer 3

ты используешь == который сортирует типы данных за тебя.

0 целочисленная переменная, в вашей проблеме строка прикастится к 'e' в целочисленную переменную. которая не парсится, и будет равно 0. строка '0e' тоже будет 0, и будет совпадать! НО! строка '1e'не равна 0 а равна 1

вместо этого используй === на примере https://ideone.com/3sZY7N

var_dump("любая строка" == 0); //true
var_dump("любая строка" === 0); //false
READ ALSO
Условия в роутинге Laravel

Условия в роутинге Laravel

Как на laravel сделать условие в роутингеК примеру есть правило

127
Поиск буквы в файле

Поиск буквы в файле

Как дописать программу? Дан многострочный файл с текстом, подсчитать кол-во гласных и согл букв и вывести их второй файл

177
Работа фильтра Search and Filter Pro (WordPress)

Работа фильтра Search and Filter Pro (WordPress)

Я пытаюсь сделать фильтр по таксономии (ещё один тип меток)Фильтр работает сортируя только один тип записи, но когда я выбираю несколько - они...

140
laravel вставить данные в базу по индексам

laravel вставить данные в базу по индексам

Всем Привет, Может кто сказать как вставить в бд данные по индексам ? Вот например код который просто вставляет данные в бд

154