PHP控制语句

PHP控制语句

1、IF语句

IF语句是多数语言中的一个重要特点,它根据条件执行程序段。PHP的IF语句类似于C:

if(expr)

statement

正如在表达式中所论述,expr被计算为它的真值。如果expr为TRUE,PHP执行相应语句,如果为FALSE则忽略它。如果$a大于$b,下例将显示’aisbiggerthanb’:

if($a>$b)

print"aisbiggerthanb";

通常,你希望根据条件执行多于一条语句。当然,不需要给每条语句都加上IF判断。取而代之,可以把多条语句组成一个语句组。

If语句可以嵌套于其他IF语句中,使你能够灵活地有条件的执行程序的各个部分。

2、ELSE语句

通常你希望满足特定条件时执行一条语句,不满足条件是执行另一条语句。ELSE就是用来做这个的。ELSE扩展IF语句,在IF语句表达式为FALSE时执行另一条语句。例如,下面程序执行如果$a大于$b则显示’aisbiggerthanb’,否则显示’aisNOTbiggerthanb’:

if($a>$b){

print"aisbiggerthanb";

}

else{

print"aisNOTbiggerthanb";

}

3、ELSEIF语句

ELSEIF,就象名字所示,是IF和ELSE的组合,类似于ELSE,它扩展IF语句在IF表达式为FALSE时执行其他的语句。但与ELSE不同,它只在ELSEIF表达式也为TRUE时执行其他语句。

可以在一条IF语句中使用多条ELSEIF语句。第一个ELSEIF表达式为TRUE的语句将被执行。在PHP3中,你也可以写成’elseif’(写成两个单词)和’elseif’(写成一个单词)效果一样。这只是写法上的细小差别(如果你熟悉C,它也是),结果是完全一样的。

ELSEIF语句仅在IF表达式和任何前面的ELSEIF表达式都为FALSE,且当前ELSEIF表达式为TRUE时执行。

下面是一个含有ELSEIF和ELSE的嵌套格式的IF语句:

if($a==5):

print"aequals5";

print"...";

elseif($a==6):

print"aequals6";

print"!!!";

else:

print"aisneither5nor6";

endif;

4、WHILE语句

WHILE循环是PHP3的一种简单的循环。象在C中一样。WHILE语句的基本格式是:

WHILE(expr)statement

WHILE语句的意思非常简单。它告诉PHP只要WHILE表达式为TRUE就重复执行嵌套的语句。每次循环开始时检查WHILE表达式的值,所以即使在嵌套语句内改变了它的值,本次执行也不会终止,而直到循环结束(每次PHP运行嵌套的语句称为一次循环)。类似于IF语句,你可以用大括号把一组语句括起来,在同一个WHILE循环中执行多条语句:

WHILE(expr):statement...ENDWHILE;

下面例子完全相同,都打出数字1到10:

/*example1*/

$i=1;

while($i<=10){

print$i++;/*theprintedvaluewouldbe$ibeforetheincrement(post-

increment)*/

}

/*example2*/

$i=1;

while($i<=10):

print$i;

$i++;

endwhile;

5、DO..WHILE语句

DO..WHILE非常类似于WHILE循环,只是它在每次循环结束时检查表达式是否为真,而不是在循环开始时。它和严格的WHILE循环的主要区别是DO..WHILE的第一次循环肯定要执行(真值表达式仅在循环结束时间检查),而不必执行严格的WHILE循环(每次循环开始时就检查真值表达式,如果在开始时就为FALSE,循环会立即终止执行).

DO..WHILE循环只有一种形式:

$i=0;

do{

print$i;

}while($i>0);

上面循环只执行一次,因为第一次循环后,当检查真值表达式时,它算出来是FALSE($i不大于0)循环执行终止。

6、FOR循环语句

FOR循环是PHP中最复杂的循环。象在C中一样。FOR循环的语法是:

FOR(expr1;expr2;expr3)statement

第一个表达式(expr1)在循环开始时无条件的计算(执行)。

每一次循环,表达式expr2都被计算。如果结果为TRUE,则循环和嵌套的语句继续执行。如果结果为FALSE,则整个循环结束。

每次循环结束时,expr3被计算(执行).每一个表达式都可为空。expr2为空则循环的次数不定(PHP默认它为TRUE,象C一样)。除非你要通过一个条件的BREAK语句代替FOR的真值表达式来结束循环,否则不要这样。

考虑下面例子。它们都显示数字1到10:

/*example1*/

for($i=1;$i<=10;$i++){

print$i;

}

/*example2*/

for($i=1;;$i++){

if($i>10){

break;

}

print$i;

}

/*example3*/

$i=1;

for(;;){

if($i>10){

break;

}

print$i;

$i++;

}

当然,第一个例子显然是最好的,但借此你可以发现在FOR循环中很多场合可以使用空的表达式。

其他的语言有一条foreach语句用来遍历一个数组或哈希(hash)表。PHP使用while语句和list()、each()函数来达到这个功能。

7、SWITCH选择语句

SWITCH语句就象是对同一个表达式的一系列IF语句。在很多时侯,你想把同一个变量(或者表达式)和许多不同的值去比较,并根据不同的比较结果执行不同的程序段。这就是SWITCH语句的用处了。

下面两个例子通过不同的方法做同一件事,一个用一组IF语句,另外一个用SWITCH语句:

/*example1*/

if($i==0){

print"iequals0";

}

if($i==1){

print"iequals1";

}

if($i==2){

print"iequals2";

}

/*example2*/

switch($i){

case0:

print"iequals0";

break;

case1:

print"iequals1";

break;

case2:

print"iequals2";

break;

}

(二)、REQUIRE语句

REQUIRE语句用指定的文件代替自己,很象C中的预处理#include。

这意味着你不能为了每次调用该函数来包含不同文件的内容,而把require()语句放在一个循环结构,。要这么做,使用INCLUDE语句。

require(’header.inc’);

(三)、INCLUDE语句

INCLUDE语句包含指定的文件。

每次遇到INCLUDE是INCLUDE语句就包含指定的文件。所以你可以在一个循环结构中使用INCLUDE语句以包含一系列不同的文件。

$files=array(’first.inc’,’second.inc’,’third.inc’);

for($i=0;$i<count($files);$i++){

include($files[$i]);

}

(四)、函数

可以通过以下的语法定义函数:

functionfoo($arg_1,$arg_2,...,$arg_n){

echo"Examplefunction.\n";

return$retval;

}

函数中可以使用任何有效的PHP3代码,甚至是其他的函数或类的定义

1、函数返回值

函数可以通过可选的return语句返回值。返回值可以是任何类型,包括列表和对象。

functionmy_sqrt($num){

return$num*$num;

}

echomy_sqrt(4);//outputs’16’.

函数不能同时返回多个值,但可以通过返回列表的方法来实现:

functionfoo(){

returnarray(0,1,2);

}

list($zero,$one,$two)=foo();

2、参数

外部信息可以通过参数表来传入函数中;参数表就是一系列逗号分隔的变量和/或常量。

PHP3支持通过值形参数(默认),变量参数,和默认参数。不支持变长参数表,但可以用传送数组的方法来实现。

3、关联参数

默认情况函数参数是传值方式。如果你允许函数修改传入参数的值,你可以使用变量参数。

如果你希望函数的一个形式参数始终是变量参数,你可以在函数定义时给该形式参数加(&)前缀:

functionfoo(&$bar){

$bar.=’andsomethingextra.’;

}

$str=’Thisisastring,’;

foo($str);

echo$str;//outputs’Thisisastring,andsomethingextra.’

如果要传递一个可变参数给默认的函数(其形式参数不是变参方式),你可以在调用函数时给实际参数加(&)前缀:

functionfoo($bar){

$bar.=’andsomethingextra.’;

}

$str=’Thisisastring,’;

foo($str);

echo$str;//outputs’Thisisastring,’

foo(&$str);

echo$str;//outputs’Thisisastring,andsomethingextra.’

4、默认值

函数可以定义C++风格的默认值,如下:

functionmakecoffee($type="cappucino"){

echo"Makingacupof$type.\n";

}

echomakecoffee();

echomakecoffee("espresso");

上边这段代码的输出是:

Makingacupofcappucino.

Makingacupofespresso.

注意,当使用默认参数时,所有有默认值的参数应在无默认值的参数的后边定义;否则,将不会按所想的那样工作。

5、CLASS(类)

类是一系列变量和函数的集合。类用以下语法定义:

<?php

classCart{

var$items;//Itemsinourshoppingcart

//Add$numarticlesof$artnrtothecart

functionadd_item($artnr,$num){

$this->items[$artnr]+=$num;

}

//Take$numarticlesof$artnroutofthecart

functionremove_item($artnr,$num){

if($this->items[$artnr]>$num){

$this->items[$artnr]-=$num;

returntrue;

}else{

returnfalse;

}

}

}

?>

上面定义了一个叫Cart的类,其中包括一个关联数组和两个用来从cart中增加和删除项目的函数。

类是实际变量的原始模型。你要通过new操作符来建立一个所需类型的变量。

$cart=newCart;

$cart->add_item("10",1);

这建立起一个Cart类的对象$cart。该对象的函数add_item()被调用来给第10项加1。

类可以从其他的类扩充得到。扩充或派生出来的类拥有基类的所有变量和函数及你在扩充定义中所定义的东西。这要使用extends关键字。

classNamed_CartextendsCart{

var$owner;

functionset_owner($name){

$this->owner=$name;

}

}

这里定义了一个名为Named_Cart的类它继承了Cart类所有变量和函数并增加了一个变量$owner和一个函数set_owner()。你建立的named_cart类的变量现在就能设置carts的owner了。在named_cart变量中你仍然可以使用一般的cart函数:

$ncart=newNamed_Cart;//Createanamedcart

$ncart->set_owner("kris");//Namethatcart

print$ncart->owner;//printthecartownersname

$ncart->add_item("10",1);//(inheritedfunctionalityfromcart)

函数中的变量$this意思是当前的对象。你需要使用$this->something的形式来存取所有当前对象的变量或函数。

类中的构造器是你建立某种类的新变量时自动被调用的函数。类中和类名一样的函数就是构造器。

classAuto_CartextendsCart{

functionAuto_Cart(){

$this->add_item("10",1);

}

}

这里定义一个类Auto_Cart,它给Cart类加了一个每次new操作时设置项目10进行变量初始化的构造器。构造器也可以有参数,这些参数是可选的,这种特点也使得其十分有用。

classConstructor_Cart{

functionConstructor_Cart($item="10",$num=1){

$this->add_item($item,$num);

}

}

//Shopthesameoldboringstuff.

$default_cart=newConstructor_Cart;

//Shopforreal...

$different_cart=newConstructor_Cart("20",17);