php流程控制语法if、while、for、foreach、switch、match

2021-03-16

流程控制的替代语法

包括 if,while,for,foreach和switch。替代语法的基本形式是把左花括号 { 换成冒号 :,把右花括号 } 分别换成endif;、endwhile;、endfor;、endforeach;以及endswitch;

<?php
if ($a == 5):
    echo "a equals 5";
    echo "...";
elseif ($a == 6):
    echo "a equals 6";
    echo "!!!";
else:
    echo "a is neither 5 nor 6";
endif;
?>

IF与SWITCH比较

在switch语句中条件只求值一次并用来和每个case语句比较。在elseif语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用 switch 语句可能会快一些

match

自PHP 8.0.0起可用,类似于switch语句,计算结果类似于三元表达式,比较是身份检查(===),而不是弱相等检查(==)

作为switch语句,match表达式将逐个匹配地执行。最初,不执行任何代码。仅当所有先前的条件表达式都未能与主题表达式匹配时,才对条件表达式求值。仅评估与匹配条件表达式相对应的返回表达式。

<?php
$result = match ($x) {
    foo() => ...,      // 如果foo()===$x,结果等于=>后面的值或方法
    $this->bar() => ...,
    $this->baz => beep(),
    $a, $b, $c => 5,   // 如果$a,$b,$c中有任意一个===$x,结果等于5
    default => baz(),  // 如果上面都不匹配,默认结果为baz(),如果上面没有匹配也没有配置default,match将会抛出UnhandledMatchError异常
};

 

{/if}