PHP入门系列(四)——流程控制

目录

  • 判断
  • 循环
  • 判断&循环
  • 包含
  • 其它
先说感受:PHP的逻辑语句与语法像极了蔡……不是、像极了C。

判断

if...else if...else
$t=date("H");
if ($t<"10")
{
    echo "Have a good morning!";
}
else if ($t<"20")
{
    echo "Have a good day!";
}
else
{
    echo "Have a good night!";
}

注意:elseif 和 else if 完全同效果,elseif 是 PHP 为 else if 专门做到容错版。更准确更严格到写法为后者: else if

switch

switch 语句用于根据多个不同条件执行不同动作,switch 语句必须结合break防止代码跳入下一个 case 中继续执行,default 语句用于不存在匹配(即没有 case 为真)时执行。

$t=date("H");
switch ($t){
    case $t<"10":
        echo "Have a good morning!";
        break;
    case $t<"20":
        echo "Have a good day!";
        break;
    default:
        echo "Have a good night!";

在这里我们强行改写下上面的例子,但值得一提的是,switch-case语句一般的用来做值匹配,范围判断交给if else吧。

循环

While
$i=0;
while ($i<3){
    echo $i++;
}
do while
$i=0;
do{
    echo $i++;
}
while ($i<3);

区别在于do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。

for
for ($i=1; $i<=5; $i++)
{
    echo $i;
}
foreach

foreach语句在数据类型章节我们已经提过了,foreach 仅能够应用于数组和对象,它是PHP提供的遍历数组的简单方式。

<?php
$array = [    "a" => 1,    "a" => 2,    "b" => 3,    400 => 4,    5,    6,];
foreach ($array as $v){
    echo $v;
}
unset($v);
echo "<br>";
foreach ($array as $k => $v) {
    echo $k,':',$v,"\n";
}
unset($k,$v);
?>

#输出
23456
a:2 b:3 400:4 401:5 402:6

判断&循环

对于判断和循环的复杂逻辑,我们需要用到辅助关键字,这一点是类似于其他语言。

continue

continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环,即跳到当前循环末尾。continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是1。

$a=1;
while ($a<10){
    $a++;
    if ($a==5){
        echo "give me five<br>";
        continue 1;
    }
    else{
        echo "game over<br>";
    }

#输出
game over
game over
game over
give me five
game over
game over
game over
game over
game over
break

break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。同样break 可以接受一个可选的数字参数来决定跳出几重循环。
对比一下continue,break是跳出循环,continue是跳出当次循环。

$a=1;
while ($a<10){
    $a++;
    if ($a==5){
        echo "give me five<br>";
        break 1;
    }
    else{
        echo "game over<br>";
    }

#输出
game over
game over
game over
give me five

包含

文件包含即包含并运行指定文件,PHP提供了四种文件包含方式,我们对比讨论。

include&require

include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:

require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

因此,如果即使包含文件已丢失,但您希望继续执行,并向用户输出结果,那么请使用 include。

#hello.php
$user=htmlspecialchars($_GET["name"]);

include 'hello.php';
echo 'hello '.$user;
require_once&include_once

include_once语句在脚本执行期间包含并运行指定文件。此行为和 include语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。include_once可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。同理require_once和require。

#hello.php
$user=htmlspecialchars($_GET["name"]);
echo "hello.php be included<br>";
include_once 'hello.php';
include_once 'hello.php';
echo 'hello '.$user;

#输出
hello.php be included
hello rabbit
include 'hello.php';
include 'hello.php';
echo 'hello '.$user;

#输出
hello.php be included
hello.php be included
hello rabbit

其它

return

如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止eval()语句或者脚本文件的执行。
注意:既然 return 是语言结构而不是函数,因此其参数没有必要用括号将其括起来。通常都不用括号,实际上也应该不用,这样可以降低 PHP 的负担。

goto

goto 操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。
这里我们改写上方的break实例:

$a=1;
while ($a<10){
    $a++;
    if ($a==5){
        echo "give me five<br>";
        goto end;
    }
    else{
        echo "game running<br>";
    }
}
end:
echo 'game over<br>';

#输出
game running
game running
game running
give me five
game over
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,115评论 0 2
  • 1. return 语句的作用 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执...
    后海大鲨鱼_阅读 1,624评论 0 0
  • 所有控制流程语句都具有相同的基本特征:根据一组条件选择要执行的语句。这些语句分三大类,并通过其主要行为进行描述。选...
    CarlDonitz阅读 240评论 0 0
  • 引言 PHP的教程我还是按照所用即所得的方式来写吧,本身对PHP的认识也不系统,因此,摸着石头过河,披荆斩棘吧~ ...
    OzanShareing阅读 521评论 2 4
  • 距离最近的一次toefl考试还有19天。脑子里总想着接下去的这几天将会是一场恶战,心里总有一些小激动。如果能顺利地...
    深夜奇谈阅读 207评论 0 0