必须要注意的是 elseif 与 else if 只有在类似下面例子中使用花括号的情况下才认为是完全相同。如果用冒号来定义 if/elseif 条件,那就不能用两个单词的 else if,否则 PHP 会产生解析错误。
PHP中流程控制的替代语法是:包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
HTML 内容“A is equal to 5”用替代语法嵌套在 if 语句中。该 HTML 的内容仅在$a等于 5 时显示。
注意:不支持在同一个控制块内混合使用两种语法!
注意:switch 和第一个 case 之间的任何输出(含空格)将导致语法错误。例如,这样是无效的:
而这样是有效的,因为 switch 之后的换行符被认为是结束标记 ?> 的一部分,所以在 switch 和 case 之间不能有任何输出:
TRUE
就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果while 表达式的值一开始就是 FALSE
,则循环语句一次都不会执行。PHP 也支持用冒号的 for 循环的替代语法。
for (expr1; expr2; expr3):
statement;
...
endfor;
foreach (array_expression as $value)
statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。foreach (array_expression as $key => $value)
statement
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。相关的方法:
break 可以接受一个可选的数字参数来决定跳出几重循环。
switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。仅当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句,直到 switch 的程序段结束或者遇到第一个 break 语句为止。如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段。例如:
这里如果 $i 等于 0,PHP 将执行所有的 echo 语句!如果 $i 等于 1,PHP 将执行后面两条 echo 语句。只有当$i 等于 2 时,才会得到“预期”的结果——只显示“i equals 2”。所以,别忘了 break 语句就很重要(即使在某些情况下故意想避免提供它们时)。
在一个 case 中的语句也可以为空,这样只不过将控制转移到了下一个 case 中的语句。
一个 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情况。例如:
case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除引用成为简单类型。switch 支持替代语法的流程控制。
允许使用分号代替 case 语句后的冒号:
declare 结构用来设定一段代码的执行指令。declare 的语法和其它流程控制结构相似:
declare (directive)
statement
directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks以及encoding。declare 代码段中的 statement 部分将被执行——怎样执行以及执行中有什么副作用出现取决于 directive 中设定的指令。declare 结构也可用于全局范围,影响到其后的所有代码(但如果有 declare 结构的文件被其它文件包含,则对包含它的父文件不起作用)。
Tick(时钟周期)是一个在 declare 代码段中解释器每执行 N 条可计时的低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N
来指定的。不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。
declare 调试内部程序使用.
先简单说明,declare这个函数只支持一个参数就是ticks,函数表示记录程序块,需配合register_tick_function 函数使用。ticks参数表示运行多少语句调用一次register_tick_function的函数。并且declare支持两种写法:
1. declare(ticks = 1); 整个脚本
2. declare(ticks = 1) { 内部的代码做记录
…
}
上述代码除了 函数体内,外部都会被执行,运行可以看执行次数和时间. 他更适合做测试代码段中每一部分的执行时间 和执行次数.
declare 必须是全局的,放在程序外部.
tick 代表一个事件,事件的定义是在register_tick_function;事件的执行频率是在(ticks=3)。
表示事件频率是执行3个才记录一次. microtime() 是打印时间.
一般用法是 declare(ticks=N);
拿declare(ticks=1)来说,这句主要作用有两种:
1、Zend引擎每执行1条低级语句就去执行一次 register_tick_function() 注册的函数。
可以粗略的理解为每执行一句php代码(例如:$num=1;)就去执行下已经注册的tick函数。
一个用途就是控制某段代码执行时间,例如下面的代码虽然最后有个死循环,但是执行时间不会超过5秒。
运行 php timeout.php
可以用 encoding 指令来对每段脚本指定其编码方式。
注意:当和命名空间结合起来时 declare 的唯一合法语法是 declare(encoding='...');,其中 ... 是编码的值。而 declare(encoding='...') {} 将在与命名空间结合时产生解析错误。
Note: 如果没有提供参数,则一定不能用括号,此时返回 NULL
。如果调用 return 时加上了括号却又没有参数会导致解析错误。Note: 当用引用返回值时永远不要使用括号,这样行不通。只能通过引用返回变量,而不是语句的结果。如果使用return ($a); 时其实不是返回一个变量,而是表达式 ($a) 的值(当然,此时该值也正是 $a 的值)。
E_COMPILE_ERROR
级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING
),脚本会继续运行。