关于PHP的控制结构

自我介绍

初次见面,我是日本系统开发株式会社的藤井。
在工作中经常涉及到PHP,我想尝试学习并阅读了一些文档,将有用的内容整理成了文章。
文章的内容大部分在php.net上可以找到,但是如果您觉得阅读文档很麻烦的话,
请务必利用这篇文章。

简要概述

在PHP的控制结构中,介绍了一些小技巧。

执行-当

do-while 是一种循环结构,可以使用 break。同时,由于它保证至少执行一次,因此可以通过条件来决定是否执行后续的处理。

<?php
$name = "hoge";
do {
    if ($name === "") {
        echo "Hello 名無し";
        break;
    }
    if (mb_strlen($name) > 100) {
        break;
    }

    echo "Hello " . $name;
} while (0);
?>

paraphrase the following natively in chinese, only need one option :
“I enjoy listening to music after a long day of work.”

在工作一整天之后,我喜欢听音乐。

对于(式1; 式2; 式3),
式1在循环开始时无条件执行,
式2在每次重复开始时执行,
式3在每次重复之后执行。

在各式中,可以用逗号分隔多个表达式,反之也可以将其为空。

作为一个简单的例子,

<?php
for (; ; ) {
    echo "piyo";
}
?>

这个脚本将会被无限执行。

在中文中,可以这样表达:”用逗号「,」进行分割,”

<?php
$hoge = ['h', 'o', 'g', 'e'];

for ($i = 0, $size = count($hoge); $i < $size; $i++) {
    echo $hoge[$i];
}
?>

可以像上面的脚本一样,只在循环开始时执行count,以提高性能。

对于每一个

foreach在数组内部无论指针如何工作。
也不会改变指针。
(例如,有一些操作指针和获取值的函数,如next。对于获取数组最后一个元素的end函数我认为非常方便)

<?php
$samples = ["hoge", "fuga", "piyo"];
echo next($samples) . PHP_EOL;

foreach ($samples as $idx => $sample) {
    echo $sample;
    if ($idx !== count($samples) - 1)
        echo ",";
    else
        echo PHP_EOL;
}
echo current($samples);
?>

中断、继续

这些循环结构(for、foreach、while、do-while和switch)只能在其中使用。
虽然在switch中可以使用continue,但由于其行为类似于break容易产生误解,因此不建议使用。
break和continue可以带有参数,参数的数量决定了从最近的循环结构中跳出的次数。
参数的默认值为1。

<?php
for ($i = 0; $i < 10; $i++) {
    echo $i . PHP_EOL;
    for ($j = $i * 10; $j < $i * 10 + 10; $j++) {
        if ($j == $i * 10 + 2)
            break;
        if ($i == 2)
            break 2;
        echo $j . ",";
    }
    echo PHP_EOL . PHP_EOL;
}
?>
上のスクリプトの出力結果
0
0,1,

1
10,11,

2

内层的for循环在+0至-1结束,
外层的for循环在+0至-2结束。

总结

    • do-whileはループ以外の使い道がある

 

    • forはパフォーマンスアップなどちょっとした工夫が可能。

 

    • foreachは内部ポインターとは別で動作する。

 

    break, continueには引数を与えられる。
广告
将在 10 秒后关闭
bannerAds