Задать вопрос

Кто-нибудь может объяснить странное поведение switch?

<?php

$a = 0;

switch ($a) {
  case 'true':
    echo 'true!';
    break;

  case 'false':
    echo 'false!';
    break;

  case 0:
    echo 'zero!';
    break;

  default:
    echo 'default!';
}

Почему этот скрипт выводит "true!", а не "zero!"??
  • Вопрос задан
  • 157 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
var_dump(0 == 'true');
bool(true)

php.net/manual/ru/language.operators.comparison.php
0 == 'true', строка 'true' переводятся в число, получается 0

php.net/manual/ru/control-structures.switch.php
Замечание:
Заметьте, что конструкция switch/case использует неточное сравнение (==).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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