流程控制:三大结构即顺序结构、分支结构、循环结构。
流程控制参考
一、顺序结构:
基本结构。代码依次顺序执行。
二、分支结构:
含if分支、switch分支
1、if分支:
if分支基本语法:
①最简if:【一种情况】条件为真则执行语句(块)。
if (条件表达式){//执行语句(块)}
②基础if:【两种情况】条件为真则执行语句(块)A,否则执行语句(块)B。
if (条件表达式){//满足条件表达式,执行语句块A}else{//不满足条件表达式,执行语句块B}
③复杂if:【多种情况】条件表达式1为真则执行语句1,条件为假则再继续判断条件表达式2:为真执行语句2,为假继续判断条件表达式3……如此可有多重情况判断。
if(条件表达式1){//执行语句块1;}elseif(条件表达式2){//执行语句语句块2}elseif(条件表达式3){//执行语句块3}......elseif(条件表达式N){//执行语句块N}else{//执行最后语句块}
2、switch分支:
switch语句类似于具有同一个表达式的一系列if语句。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是switch语句的用途。
Note:注意和其它语言不同,continue语句作用到 switch 上的作用类似于break。如果在循环中有一个 switch 并希望 continue 到外层循环中的下一轮循环,用continue 2。(草真是个糟糕的设定,1个大坑!特么的为什么非要和其他语言不一致!)
switch语法:
switch(条件表达式){case 值1:语句块1;break;case 值2:语句块2;break;......case 值N:语句块N;break;default:最后的语句块;}
注意:default分支可以有,也可以没有。
下例给出个百分制分数,让代码给出成绩评价。
<?php$score=99;//可更改成绩(0-100)测试,百分制超过100分成绩为非法switch($score){case ($score > 100):echo '百分制你居然超过100分!作弊!你的作弊成绩='.$score;break;case 100:echo '100分!恭喜你!成绩='.$score;break;case ($score >= 90):echo '90分以上!优!成绩='.$score;break;case ($score >= 80):echo '80分以上!良!成绩='.$score;break;case ($score >= 70):echo '80分以上!中!成绩='.$score;break;case ($score >= 60):echo '60分以上!及格!成绩='.$score;break;default:echo '你完了!居然60分都考不到!成绩='.$score;break;}
无意中发现PHP(我用的是PHP5.6.25)的case语句居然可以判断条件表达式!这种写法是PHP独有的写法。注意:其他语言case语句不可以放判断表达式,只能放整型值或字符串值。也就是说,在其他语言中上例的写法是【错误】的!
<?php$score=88;//可更改成绩(0-100)测试,超过100分(无效分)按不及格处理$rank = (int)($score/10);//注意括号不能省略!echo 'Rank='.$rank.'<br>';switch($rank){case 10:echo '100分!恭喜你!成绩='.$score;break;case 9:echo '90分以上!优!成绩='.$score;break;case 8:echo '80分以上!良!成绩='.$score;break;case 7:echo '80分以上!中!成绩='.$score;break;case 6:echo '60分以上!及格!成绩='.$score;break;default:echo '你完了!居然60分都考不到!成绩='.$score;break;}?>
以上是传统写法,也是其他语言的写法。
三、循环结构:
for循环:
for循环的语法是:
for (expr1; expr2; expr3)statement
注意:在大多数健壮语言中,i作为循环计数器仅在for循环体内有效,即i为循环体内的局部变量,循环体外无效,不可访问。php这种循环体外依旧可以访问计数器i的设定是不健壮的。
while循环:
点击见参考手册查看语法和示例。
do-while循环:
点击见参考手册查看语法和示例。
foreach循环:
四、循环流程控制语句:
(跳出整个循环或跳出本次循环进入下一次循环):
1、continue 参考
continue在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
Note:注意在 PHP 中switch语句被认为是可以使用continue的一种循环结构。
continue接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是1(层),即跳到当前循环末尾。
2、break 参考
break结束当前for,foreach,while,do-while或者switch结构的执行。即跳出当前循环体。
break可以接受一个可选的数字参数来决定跳出几重循环。默认值是1(层)。
五、流程控制替代语法:
PHP 提供了一些流程控制的替代语法,包括if,while,for,foreach和switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成endif;,endwhile;,endfor;,endforeach;以及endswitch;。
流程控制替代语法主要用于php和html混搭。
<?phpif($a==5):?>Aisequalto5<?phpendif;?>
在上面的例子中,HTML 内容“A is equal to 5”用替代语法嵌套在if语句中。该 HTML 的内容仅在$a等于 5 时显示。
上图为php和html混编打印九九乘法表。
使用替代语法混合php和html打印九九乘法表,结果和先前的例子完全一致。代码结构看起来清晰直观。
六、常用系统函数
1、有关输出的函数:
print():类似于echo函数,本质是一种结构(不是函数),返回1,可以不使用括号。
print_r():类似于var_dump函数。但是比var_dump简单。不会输出数据的类型,只会输出值(数组打印比较多)。
下图为示例。
2、有关时间的函数:
date():按照指定格式对应的时间戳(1970年格林威治时间开始计算的秒数),如果没有指定特定时间戳,那么默认为当前时间戳。
time():返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
mircotime():返回当前 Unix 时间戳和微秒数
下图为时间函数示例:
strtotime():按照规定格式的字符串转换成时间戳。
文件包含:
php代码执行流程:
1、读取代码文件(php程序)
2、编译:将php代码转化为字节码(生成opcode)
3、zendengine来解析opcode,按照字节码去进行逻辑运算
4、转换成对应的html代码
文件加载原理:
1、在文件加载(include或require)的时候,系统会自动的将被包含文件的中的代码相当于嵌入到当前文件中
2、加载位置:在哪加载,对应的文件中的代码嵌入的位置就是对应的include位置。
3、在php中,被包含的文件是单独进行编译的。
php文件在编译的过程中如果出现了语法错误,那么会失败(不会执行);但是如果被包含文件有错误的时候,系统会在执行到包含include这条语句的时候才会报错。
include和include_once的区别:
include:系统碰到一次,执行一次,如果对同一文件进行多次加载,那么系统会执行多次;
include_once:系统碰到多次,也只会执行一次。
include和require区别:本质都是包含文件。唯一的区别在于包含不到文件的时候,报错的形式不一样。include报错是“警告”,并不影响后续代码的执行。require报错是“警告”+“致命错误”,导致代码不再执行(require后面的代码)
文件加载路径:
文件在加载的时候需要指定文件路径才能保证php找到正确的对应的文件。
文件加载的路径包含两大类
1、绝对路径:
从磁盘根目录开始(本地绝对路径)。例如:windows的c:\windows;linux的/bin
从网站根目录开始(网络绝对路径)。例如:http://localhost;
2、相对路径:从当前文件所在目录开始的路径
绝对路径和相对路径加载区别:
1、绝对路径相对效率偏低,但是相对安全(路径基本不会出现问题)
2、相对路径相对效率高些,但是容易出错。
文件嵌套包含:一个文件包含另一个文件,同时被包含的文件又包含另一个文件。
注意:多重文件互相嵌套,如果路径中有.当前目录或..上级目录,特别容易出现路径错误!
如果觉得《php学习笔记02:流程控制if switch 循环 系统函数 文件路径》对你有帮助,请点赞、收藏,并留下你的观点哦!