@novrm

Какова причина поведения in_array на константе класса определенной как массив?

class Test
{
    const TEST_EMPTY = [];

    const TEST_VALUES = [
        'KEY' => 'value',
    ];
};

echo in_array(0, Test::TEST_EMPTY) ? 'yes' : 'not'; // 'not'
echo in_array(0, Test::TEST_VALUES) ? 'yes' : 'not'; // 'yes'
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
По умолчанию в PHP ниже 8 версии сравнение числа и строки в in_array всегда приводит строку к числу, то есть строка 'value' приводится к значению 0 и работает сравнение 0 == 0.
Начиная с 8 версии приведение к числу выполняется только если строка представляет из себя корректное число. Иначе оба значения будут приведены к строкам ('value' == '0').
Можно использовать третий параметр in_array, установив его в true. Тогда будет выполняться строгое сравнение без приведения типов ('value' === 0).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
LAPTOP.RU Москва
от 150 000 до 190 000 ₽
LAPTOP.RU Москва
от 130 000 до 170 000 ₽
LAPTOP.RU Кострома
от 25 000 до 65 000 ₽
05 мар. 2021, в 20:30
5000 руб./за проект
05 мар. 2021, в 20:08
1000 руб./за проект
05 мар. 2021, в 18:46
10000 руб./за проект