New Cases In Switch

With PHP 8.0, the result of comparisons between empty values, such as 0, '' (empty string), or [] (empty array), have changed. The impact is obvious with the == operator, and it is less obvious with switch, which relies on the same underlying code.

In particular, when there are several falsy cases in a switch, the selection of cases may be different between PHP versions, like in this illustration.

In PHP 7.4 and older, 0 == '', so the first case is selected. After PHP 8.0, 0 != '', and the second case is selected.

PHP code

<?php

foreach([0, '', null, []] as $a )
     switch($a) {
             case 0;
                     print Zero\n;
                     break;

             case '':
                     print Empty string\n;
                     break;

             case []:
                     print []\n;
                     break;
     }

?>

Before

Zero
Zero
Zero
[]

After

Zero
Empty string
Zero
[]

PHP version change

This behavior changed in 8.0