在这篇文章中,我们展示了如何在PHP中控制程序的流程。
$ php -v php -v PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) ...
我们使用PHP版本8.1.2。
PHPif语句
if
关键字用于检查表达式是否为真。如果为真,则执行一条语句。该语句可以是单个语句或复合语句。复合语句由用大括号括起来的多个语句组成。
<?php $num = 31; if ($num > 0) { echo "\$num variable is positive\n"; }
我们有一个$num
变量。它的赋值为31。if
关键字检查布尔表达式。表达式放在方括号之间。表达式31>0
为真,因此执行下一条语句。如果只有一个语句要执行,大括号是可选的。
$ php ifstatement.php $num variable is positive
如果我们打算执行多个语句,我们必须将它们放在方括号内。如果我们不使用它们,那么只会执行第一条语句。大括号构成if
语句的body。
<?php $num = 31; if ($num > 0) { echo "\$num variable is positive\n"; echo "\$num variable equals to $num\n"; }
我们可以使用else
关键字来创建一个简单的分支。如果if关键字后方括号内的表达式计算结果为假,则自动执行else主体内的语句。
<?php $sex = "female"; if ($sex == "male") { echo "It is a boy\n"; } else { echo "It is a girl\n"; }
我们有一个$sex
变量。它有“女性”字符串。布尔表达式的计算结果为false,我们在控制台中得到“Itisagirl”。
$ php boyorgirl.php It is a girl
我们可以使用elseif
关键字创建多个分支。elseif
关键字测试另一个条件当且仅当不满足前一个条件时。请注意,我们可以在测试中使用多个elseif
关键字。
<?php echo "Enter a number: "; $a = intval(fgets(STDIN)); if ($a < 0) { printf("%d is a negative number\n", $a); } elseif ($a == 0) { printf("%d is a zero\n", $a); } elseif ($a > 0) { printf("%d is a positive number\n", $a); }
我们使用fgets
函数从用户那里读取一个值。测试该值是负数、正数还是等于零。
$ php ifelsestm.php Enter a number: 4 4 is a positive number $ php ifelsestm.php Enter a number: -3 -3 is a negative number
PHPswitch语句
switch
语句是一个选择控制流语句。它允许变量或表达式的值通过多路分支控制程序执行的流程。它以比使用if
、elseif
语句更简单的方式创建多个分支。
switch
语句与另外两个关键字一起使用:case
和break
。case
关键字用于根据圆括号中的值测试标签。如果标签等于值,则执行case后面的语句。break
关键字用于跳出switch
语句。有一个可选的default
语句。如果没有标签等于该值,则执行默认语句。
<?php $domain = 'sk'; switch ($domain) { case 'us': echo "United States\n"; break; case 'de': echo "Germany\n"; break; case 'sk': echo "Slovakia\n"; break; case 'hu': echo "Hungary\n"; break; default: echo "Unknown\n"; break; }
在我们的脚本中,我们有一个$domains变量。它有’sk’字符串。我们使用switch
语句来测试变量的值。有几个选项。如果该值等于“us”,则“UnitedStates”字符串将打印到控制台。
$ php domains.php Slovakia
我们得到“斯洛伐克”。如果我们将$domains变量更改为“rr”,我们将得到“Unknown”字符串。
PHP匹配表达式
match
表达式是一个更强大的选择语句。它使用严格的身份检查(===)比较值,而不是较弱的质量检查(==)。
<?php $vals = ['sky', true, -4, [1, 2, 3, 4]]; foreach ($vals as $val) { $t = gettype($val); $res = match($t) { 'string' => 'value is a string', 'integer' => 'value is an integer', 'boolean' => 'value is a boolean', 'array' => 'value is an array', default => 'unknown type' }; echo "$res\n"; }
在示例中,我们有一个包含不同类型元素的数组。通过匹配表达式和gettype
函数,我们可以获取每个元素的类型。
$ php types.php value is a string value is a boolean value is an integer value is an array
PHPwhile循环
while
是一个控制流语句,允许根据给定的布尔条件重复执行代码。
while
循环在表达式计算为真时执行语句。该语句是以分号结尾的简单语句或用大括号括起来的复合语句。
<?php $i = 0; while ($i < 5) { echo "PHP language\n"; $i++; }
在代码示例中,我们反复将“PHP语言”字符串打印到控制台。
while
循环包含三个部分:初始化、测试和更新。语句的每一次执行称为一个循环。
$i = 0;
我们启动$i
变量。它在我们的脚本中用作计数器。
while ($i < 5) { ... }
方括号内的表达是第二阶段,测试。while循环执行主体中的语句,直到表达式被计算为false。
$i++;
while
循环的最后一个第三阶段是更新;计数器递增。请注意,while
循环处理不当可能会导致无限循环。
$ php whilestm.php PHP language PHP language PHP language PHP language PHP language
程序向控制台打印一条消息五次。
dowhile
循环是while
循环的一个版本。不同之处在于此版本保证至少运行一次。
<?php $count = 0; do { echo "$count\n"; } while ($count != 0)
首先执行迭代,然后计算真值表达式。
while
循环通常与list
和each
函数一起使用。
<?php $seasons = ["Spring", "Summer", "Autumn", "Winter"]; while (list($idx , $val) = each($seasons)) { echo "$val\n"; }
$seasons
数组中有四个季节。我们遍历所有值并将它们打印到控制台。each
函数返回数组中的当前键和值对并推进数组游标。当函数到达数组末尾时,它返回false并终止循环。
each
函数返回一个数组。赋值的左侧也必须有一个数组。我们使用list
函数从两个变量创建一个数组。
$ php seasons.php Spring Summer Autumn Winter
PHP关键字
for
循环与while
循环做同样的事情。只是它将所有三个阶段,初始化、测试和更新放在圆括号之间的一个地方。主要用于在进入循环前已知迭代次数的情况。
让我们用for
循环来举例。
<?php $days = [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]; $len = count($days); for ($i = 0; $i < $len; $i++) { echo $days[$i], "\n"; }
我们有一组一周中的几天。我们想从这个数组中打印所有这些天。
$len = count($days);
或者我们可以通过编程计算出数组中的项数。
for ($i = 0; $i < $len; $i++) { echo $days[$i], "\n"; }
这里我们有for
循环结构。这三个阶段用分号分隔。首先,启动$i
计数器。启动部分只发生一次。接下来,进行测试。如果测试结果为真,则执行该语句。最后,计数器递增。这是一个周期。for
循环迭代直到测试表达式为假。
$ php forloop.php Monday Tuesday Wednesday Thursday Friday Saturday Sunday
PHPforeach语句
foreach
结构简化了数据集合的遍历。它没有明确的计数器。foreach
语句逐一遍历数组,并将当前值复制到构造中定义的变量。在PHP中,我们可以使用它来遍历数组。
<?php $planets = [ "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" ]; foreach ($planets as $item) { echo "$item "; } echo "\n";
在此示例中,我们使用foreach
语句遍历行星数组。
foreach ($planets as $item) { echo "$item "; }
foreach
语句的用法很简单。$planets
是我们迭代的数组。$item
是具有数组当前值的临时变量。foreach
语句遍历所有行星并将它们打印到控制台。
$ php foreachstm.php Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune
运行上面的PHP脚本会得到这个输出。
foreach
语句还有另一种语法。它与地图一起使用。
<?php $benelux = [ 'be' => 'Belgium', 'lu' => 'Luxembourgh', 'nl' => 'Netherlands' ]; foreach ($benelux as $key => $value) { echo "$key is $value\n"; }
在我们的脚本中,我们有一张$benelux
地图。它包含映射到比荷卢各州的域名。我们遍历数组并将键及其值打印到控制台。
$ php foreachstm2.php be is Belgium lu is Luxembourgh nl is Netherlands
PHPbreak,continue语句
break
语句用于终止循环。continue
语句用于跳过循环的一部分并继续循环的下一次迭代。
<?php while (true) { $val = rand(1, 30); echo $val, " "; if ($val == 22) break; } echo "\n";
我们定义了一个无限的while
循环。只有一种方法可以跳出这样的循环——使用break
语句。我们从1到30中选择一个随机值并打印它。如果该值等于22,我们将结束endlesswhile循环。
$ php testbreak.php 6 11 13 5 5 21 9 1 21 22
我们可能会得到这样的东西。
在下面的示例中,我们打印一个不能被2除而没有余数的数字列表。
<?php $num = 0; while ($num < 1000) { $num++; if (($num % 2) == 0) continue; echo "$num "; } echo "\n";
我们使用while
循环遍历数字1..999。
if (($num % 2) == 0) continue;
如果表达式$num%2
返回0,则所讨论的数字可以除以2。执行continue
语句并跳过循环的其余部分。在我们的例子中,循环的最后一条语句被跳过并且数字没有打印到控制台。下一次迭代开始。
在本文中,我们介绍了PHP的流控制。
列出所有PHP教程。