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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽