@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'
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
По умолчанию в PHP ниже 8 версии сравнение числа и строки в in_array всегда приводит строку к числу, то есть строка 'value' приводится к значению 0 и работает сравнение 0 == 0.
Начиная с 8 версии приведение к числу выполняется только если строка представляет из себя корректное число. Иначе оба значения будут приведены к строкам ('value' == '0').
Можно использовать третий параметр in_array, установив его в true. Тогда будет выполняться строгое сравнение без приведения типов ('value' === 0).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы