1.任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句)。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本身可以当作是一行语句。本章介绍了各种语句类型。
2.if
注意:不仅是INT,FLOAT,连字母字符也可以进行大小值的比较
echo ‘x’>‘a’;
注意:花括号可省略但不建议。
3.else
在IF条件相反的情况下才会执行
4.elseif
作为IF和ELSE之间的补充假设
5.替代语法
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;
如:if else可以写作如下形式
if(expr):
statement;
else:
statement;
endif;
6.while
只要expr为真就一直执行。
扩展:
通过each(取得数组上一个(如果是第一次则索引为0)元素,并将指针指向下一个元素)和list(将数组中的值赋与给变量)加上while循环数组
<?php
$a=['a','b']; while(list($k,$v)=each($a)) { echo $k."=>".$v; } ?>7.do while
和while大体一致,不同的是,它至少会执行一次do里的statement
8.for
比较特殊的是可以省略一部分条件语句,而在statement里控制
如:
<?php
for($i=0;;$i++) { if($i>0) { break; } } ?>或者
<?php
$i = 0; for(;;) { if($i>10) { break; } echo $i; $i++; } ?>或者
<?php
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $j, $i++);
?>
注意:expr可以优化的,如增加一个中间变量替换在循环中需要不停重复计算的变量。
9.foreach
可以遍历数组,也可以遍历对象。
注意:$k=$v 在foreach后 $v仍然存在,所以需要unset掉$v
注意:foreach不能用@隐藏错误信息
小技巧:
<?php
$arr = [1,2,3,4]; foreach($arr as $k=>&$v) { $v = $v*2; } ?>使用引用在遍历的时候修改原数组数据。5.5中可以使用list取出二维数组(仅在5.5里有效。。)
<?php
$a = [[1,2],[3,4]]; foreach($a as list($y,$z)) { echo $y."=>".$z.PHP_EOL; } ?>//将输出1=>2\n3=>4
10.break
跳出当前循环
后加INT可设置跳出几层循环,但INT不可为变量,且必须大于0。
11.continue
跳过当前循环余下的代码并在下一次循环条件为真的时候执行下一个循环。
与break一样,后加INT可设置跳出几层循环,但INT不可为变量,且必须大于0。
提示:continue可用于switch,但效果和break相同。
12.declare
最简单的用法就是监控代码执行
如:
<?php
/* * ticks表示zend引擎每执行ticks次语句,就检查注册进tick_function的函数 * 所以本例为每执行一次,就运行一次check_timeout * 本脚本如果执行时间超过$timeout,就exit * */ declare(ticks=1); $stime = time(); function check_timeout() { global $stime; $timeout = 1; $t =time()-$stime; if($t>$timeout): exit("over {$timeout} seconds, time out!".PHP_EOL); endif; echo "running over {$t}!".PHP_EOL; } register_tick_function("check_timeout"); while(1) { echo "go".PHP_EOL; }?>
其他更深的用法再说吧,听大神说这个是PHP程序员装逼时用的。
13.return
如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止 eval() 语句或者脚本文件的执行。
注意:如何在全局,则中止后面的代码。如果是被嵌套的文件里的,则仅中止被嵌套文件里的后面的代码,而不影响嵌套的文件。
注意:如果当前脚本是被 include 的,则 return 的值会被当作 include 调用的返回值。
注意:return是语言结构而非函数,所以后面不要加括号,容易错误。
14.require
和include几乎完全一样,不同的是发生错误时警告级别不同,require是COMPILE_ERROR。
因为是语言结构,所以我个人的喜好是不添加括号。
15.include
包含并运行指定文件,产生错误的警告级别为E_WARNING。
与requirce相同的是查找的文件路径顺序:
1.如果是绝对路径,则从绝对路径查找;
2.如果仅是文件名,先从include_path(php.ini里设置)查找,如果仍未找到,则才在脚本文件的目录和当前工作目录下查找。
注意:如果定义了绝对路径(win下 E:\或 linux下 etc/path)或相对路径(./或../),include_path会被忽略。
包含后,包含的文件在被包含文件的行下将继承被包含文件的变量及函数。
如果包含文件是在函数内部,则变量作用域仅在函数内部(魔术常量除外)。
在LINUX下,如果PHP配置开启了:allow_url_open,则可以远程include PHP文件。
16.require_once
在包含时会检查是否被包含过,如果是则不会被再次包含,其他用法与require一模一样。参见inlcude_once
17.include_once
可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。
18.goto
可以用来跳转到程序中的另一个位置,该位置可以用目标名加上冒号来标记,该位置只能位于同一个文件和作用域(也就是说,函数或类方法内的goto无法跳出该函数和类方法),{也无法跳入任何循环或SWITCH结构中,但可以跳出循环或SWITCH}(重点记忆),可以用于代替多层BREAK。
简单例子:
<?php
goto show; echo "world!"; show: echo "hello"; ?>
最后作个记号: 这里讲得PHP运行的流程和PHP整体结构,非常不错。