Почему switch/case выводит не заданное выражение?

187
20 февраля 2017, 19:38

Надо вывести значение post_max_size, которое указано в настройках PHP

Есть такой код:

$size = ini_get("post_max_size");
$letter = $size{strlen($size)-1};
$size = (int)$size;
switch($letter){
    case 'G':
        $size *= 1024;
    case 'M':
        $size *= 1024;
    case 'K':
        $size *= 1024;
}
echo $size;

Зачем умножать мегабайты, если потом выведет, совсем не то число?

Это по урокам специалиста, но как работает этот код, он не показал и перешёл к другой теме. Может просто, быстро показал для примера?

Answer 1

Вообще тут показывается работа оператора switch и, в частности, что будет, если не писать break в конце каждого case. Ибо по дефолтку, попадая в одну из веток case, если не писать break, то код будет "проваливаться" вниз и выполнять остальные ветки, игнорируя нижележащие инструкции. В этом суть данного примера (и, кстати, на сколько я помню, я видел урок и там как раз вполне всё объясняется от начала работы оператора и до задачи с информацией из файла..........UPD: я даже нашел Видео - начиная с 3 минуты и до 30... разжёвано подробнейше).

Поэтому если, например, $letter == 'G', то значение size умножится на 1024, потом провалится вниз к M (но буква уже не будет с ним сравниваться, а сразу исполнится инструкция), еще раз умножится, провалится к K (тоже сравниваться буква уже не будет) и умножится еще раз. В общем, итог показа будет отображение данных в байтах. Если такое поведение не нужно — ставятся "бряки".

READ ALSO
Импорт csv через php

Импорт csv через php

Пытаюсь импортировать csv не через phpmyadmin а через php запросМне предложили вот такой вариант (LOAD DATA INFILE на хостинге закрыт)

320
Установка в PDO констант по умолчанию

Установка в PDO констант по умолчанию

Для вывода результата из запроса нужно установить

234
Организация Domain events с помощью ZF EventManager

Организация Domain events с помощью ZF EventManager

Возможно ли организовать модель доменных событий используя возможности ZF-EventManager?

235