一、判断
判断用白话讲就是如果怎么样就怎么样要不然就怎么样。
用的是“if”这个前面我们已经用过,这里我们详细讲一下。完整的if是
3 |
}elseif(expr2){ //要不然如果怎样 |
上面的代码中有三个条件,expr1,expr2,以及这两种以外,如果只有两种条件,可以把中间elseif去掉即可,如果有4种5种。。。只要继续写elseif即可,程序将从上到下去匹配expr直到为true。其中elseif也可以写成,else if中间有个空格,当code们只有一句时可以去掉大括号,但是,为了代码清晰,我们还是加上比较好,以免出错。还有一点,当只有一个条件时,甚至可以不要else。下面例子将展示所有类型
07 |
echo "$a<1";//我没有使用大括号 |
08 |
elseif($a<2){//我和上面的else if不同 |
17 |
//尽量使用括号的忠告看看下面的代码 想想结果是否和你想的一样 |
二、循环
循环比较多,分别介绍下。
for:可以理解为,从一个值到另一个值,一直做某件事。for的写法是
for (expr1; expr2; expr3)
code
第一个表达式(expr1)在循环开始前无条件求值一次。
expr2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。
expr3 在每次循环之后被求值(执行)。 expr3不一定出现在小括号里面,也可以写在code里面,总之就是要让expr2有能变成false否则将陷入死循环简单例子
1 |
for ($i = 1; $i <= 10; $i++) { |
while:可以理解为,当怎么样那么就一直怎么样。while的写法是
while (expr)
code
它告诉 PHP 只要 while 表达式的值为 TRUE 就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果 while 表达式的值一开始就是 FALSE,则循环语句一次都不会执行。这里要注意要给expr有false的机会,否则将陷入死循环。
do-while:这个基本上和while是一样的唯一的区别在,无论while判断是否为true,都会执行一次,循环体。do-while的写法
foreach:这个在前面有介绍过,就是遍历数组并且只能用于遍历数组。如果提供给foreach的不是数组,将会出现致命错误。Invalid argument supplied for foreach();foreach的写法有两种
foreach (array_expression as $value)
code
foreach (array_expression as $key => $value)
code
第一种方法遍历数组的值将值赋值给value,而第二种方法把值赋值给value把key赋值给key
注意:除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。所以被foreach操作的数组本身不发生变化。
switch:switch可以理解为很多个if。
12 |
echo "i equals nothing"; |
为避免错误,理解 switch 是怎样执行的非常重要。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。仅当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句,直到 switch 的程序段结束或者遇到第一个 break 语句为止。如果不在 case 的语句段最后写上 break的话,PHP 将继续执行下一个 case 中的语句段。另外如果一个case也没匹配上,将会执行default:;试试下面的代码
这里如果 $i 等于 0,PHP 将执行所有的 print 语句!如果 $i 等于 1,PHP 将执行后面两条 print 语句。只有当 $i 等于 2 时,才会得到“预期”的结果——只显示“i equals 2”。所以,别忘了 break 语句就很重要(即使在某些情况下故意想避免提供它们时)。
在 switch 语句中条件只求值一次并用来和每个 case 语句比较。在 elseif 语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用 switch 语句可能会快一些。
在一个 case 中的语句也可以为空,这样只不过将控制转移到了下一个 case 中的语句。
break:break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。
break可以接受一个可选的数字参数来决定跳出几重循环。 试试下面的代码
1 |
for ($i = 1; $i <= 10; $i++) { |
continue:continue和break类似,只是他用来跳过本次循环。continue后面也可以接数字表示跳出几重循环。试试下面的代码,看看和你想的是不是一样吧
1 |
for ($i = 0; $i < 5; ++$i) { |
三、其他
declare:directive 部分允许设定 declare 代码段的行为。其实这个不常用。至少在我工作中没用到,他可以使用其他方式替代。不去了解也罢。
return:即返回,用在函数中。
如果在一个函数中调用 return() 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return()也会终止 eval() 语句或者脚本文件的执行。
如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被 include() 的或者 require()的,则控制交回调用文件。此外,如果当前脚本是被 include() 的,则 return() 的值会被当作 include() 调用的返回值。如果在主脚本文件中调用 return(),则脚本中止运行。如果当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件中止运行。
注意: return() 是语言结构而不是函数,因此其参数没有必要用括号将其括起来。通常都不用括号,实际上也应该不用,这样可以降低 PHP 的负担。
试试下面的代码看看是不是和你想的一样
goto:顾名思义即跳到某处执行,但是因为使用goto会使代码流程不混乱,所以我们不推荐大家使用。也就不具体讲了。
另外提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及endswitch;。 当看到别人写得代码出现这种形式的时候不要不认识即可,有时候html和php混合写得时候也可以用这种形式来使代码更加易读。
接下来是我们从一开始到现在来第一次接触到两个或两个以上文件。
include和include_once两者都是包含并运行文件,唯一的区别是,include_once如果该文件中的代码已经被包含了,则不会再次包含。其实我们可以这样想,包含了以后,两个php文件可以看成一个php文件,就这么简单。
require和require_once:和include其实是一样的,唯一的区别是当包含失败时,include() 产生一个Warning而 require() 则导致一个致命错误,使脚本停止运行。其实也可以从字面上去理解,include仅仅是包含,require不仅仅是包含还是需求。
新建a.php,b.php两个文件分别写入如下代码然后运行b.php看看效果吧
2 |
include(dirname(__FILE__)."/a.php"); |
过会儿试试下面两个代码,和上面一样分别写在两个文件中
3 |
echo "include_once\n";include_once("b.php"); |
4 |
echo "include_once\n";include_once("b.php"); |
5 |
echo "include\n";include("b.php"); |
然后运行文件a看看效果吧
本文固定链接: http://www.qaforcode.net/archives/243 | 猪哥每日一贴