Home > php教程 > php手册 > body text

PHP3中文文档(续3)

WBOY
Release: 2016-06-21 09:10:30
Original
751 people have browsed it

中文

任何PHP脚本语言都是使用连续的语句创建的。一个语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句甚至一个不做任何事情的语句(一个空的语句)。语句经常使用分号(;)结尾。另外,利用卷支持可以把一组语句压缩从而使语句可以被组成语句组。一个语句组是一个关于自身的申明。不同的语句类型将在本章被描述。

 

常量
    PHP定义了一些常量提供给结构使它能够在运行时定义更多的类型。常量和变量十分的类似,但是他们在语法上有些微的不同。

    被预定义的常量是__FILE__ 和__LINE__,在处理他们时,会发现他们与文件名和行号相符合。请参考如下示例:

 

Example 6-1. Using __FILE__ and __LINE__ //使用__FILE__ 和__LINE__


function report_error($file, $line, $message) {

echo "An error occured in $file on line $line: $message.";

}

 

report_error(__FILE__,__LINE__, "Something went wrong!");

?>

 

    您可以使用函数define() 和undefine()来定义其它的常量。

 

    Example 6-2. Defining Constants //定义常量


define("CONSTANT", "Hello world.");

echo CONSTANT; // outputs "Hello world."

undefine ("CONSTANT");

?>

表达式

    表达式是PHP最重要的基石。在PHP中,您所写的几乎所有的内容都是表达式。最简单同时也是最精确的定义一个表达式的方法是“任何内容都有它的值”。

 

    立刻进入大脑的简单例子是:常量和变量。当您输入“$a = 5”,您就把值“5”赋给了变量“$a”,明显的,获得这个数值5,或者说’5’是一个值为5的表达式(在这个例子中,’5’是一个整数常量)。

    赋值以后$a的值是5, 因此如果你这样写$b = $a,你它同$b = 5所表达的意思是一样的.换句话说,$a是一个值为5的表达式.如果一切工作正常,这些将是所发生的一切.

    再稍微复杂一点的表达式的例子是函数(function) .例如,考虑以下下面的函数:

 

function foo () {

return 5;

}

 

    假设你熟悉函数的概念(如果你不熟悉,看一下第四章),你可能假设$c=foo()从本质上说同$c=5是一致的,你是正确的.函数是以他们的返回值为值得表达式.既然foo()返回5,表达式’foo()’的值就是5。一般来说,函数不会仅仅返回一个态的值,他们一般都计算一些东西。

    当然,PHP里面的值不必须是整数,并且经常他们不是PHP支持三种标量类型的数值:整数,浮点数,和字符串。(标量值是不能被再分为更小部分的数值,例如它不能是数组)。php也支持两种合成类型的数值:数组和对象。每一种数据类型都能被赋值给变量或者通过函数返回。

    迄今为止,PHP/FI 2的用户不应该感觉到任何改变。然而,PHP把表达式带入了一个更深的层次,如同许多其它语言所作的一样。PHP是一种面向表达式的语言,几乎每一件事都是一个表达式.考虑一下我们已经处理过的表达式“$a=5”.可以非常容易的看出这里包含了两个值,常量’5’的值,和$a的值。$a的值也已经被更新成5。但是事实是这里还有一个额外的值包含其中,并且这个值就是赋值语句本身.这个赋值语句本身计算所赋值的数值,在这个例子中是5。实际上,它意味着“$a=5”,不管他做什么,是一个值为5的表达式。因此,一些像’$b=($a=5)’的表达式,实际上同’$a=5;$b=5’(分号代表表达式的结束)是一样的.既然赋值语句被以从右到左的顺序解析,你还可以这样写’$b=$a=5’。

    另一个很好的表达式的例子是前和后递增量的方向性.PHP/FI 2的用户和许多其他语言的用户也许对符号(variable(变量)++和variable--)非常熟悉.这些就是递增和递减符号.在PHP/FI 2中,语句’$a++’没有任何值(不是一个表达式),并且因此你不能给它赋值或以任何方式来使用它.PHP通过发展这些表达式加强了递增(increment)/递减(decrement)的能力,像c语言中一样.在PHP中,有两种递增形式-前递增和后递增.这两种递增本质上都是使变量加1,并且对变量的影响都是一样的.他们的区别是递增表达式本身的值.前递增的形式是’++$variable(变量)’,计算递增值(PHP 在读出它的值之前递增变量的值,因此叫前递增)后递增的形式是’$variable++’,在变量递增前计算$variable的原始值(PHP先读出变量的值,然后再递增,因此叫后递增).

    表达式的最后一个例子我们将处理组合操作符赋值表达式.你已经知道了如果你想将变量$a的值加1,你可以简单的写成’$a++’或’++$a’.但是如果你想加的数值不只是1呢,例如3?你可以多次使用’$a++’,但是很明显这样不是一个有效的,简洁的方式.通常的方法是这样写’$a=$a+3’. ’$a=$a+3’计算变量$a加3后的值,并且被重新赋值给了变量$a,最终的结果是变量$a的值加了3.在PHP中,如同像C一样的其它一些语言,你可以用更简短的方式来做这些.给变量$a的当前值加3可以写’$a+=3’.这个表达式正确的意思是”读出$a的值,加3,然后把它赋值给$a”.除了更加简洁和简略外,这样的语句执行起来速度更快.表达式’$a+=3’的值,像一个正则赋值语句的值.是被赋予的值.注意它不是3,而是$a+3的组合的值(这是一个被赋给$a的值).任何二元操作符都可以被用来组合成复合赋值操作符.例如,’$a-=5’($a=$a-5),’$b*=7’($b乘以7),等等.

    如果你没有在其它语言中加过的话,你会认为下面的表达式看起来非常奇怪.这就是三元条件算子:

    $first ? $second : $third

    如果第一个子表达式的值为真的话(非0),那么他的第二个子表达式将被计算,并且这就是整个条件表达式的值.否则,第三个子表达式将被预算,结果作为整个条件表达式的值.

    下面的例子可以帮助你大体上理解前,后递增和表达式.

function double($i) { return $i*2;}

$b = $a = 5; /* 把5赋值$a和$b */

$c = $a++; /* 后递增, 把$a的原始值(5)赋值给$c */

$e = $d = ++$b; /* 前递增, 把经过递增操作的$b的值(6)赋值给$e和$d */

/* 这时,$d和$e都等于(6) */

$f = double($d++); /* 把$d的原始值(6)加倍,然后赋值给$f.$f等于(12)*/

$g = double(++$e); /* 先把$e执行递增操作,然后加倍, 2*7 = 14赋值给$g*/

$h = $g += 10; /* 首先,$g加10,并且最终结果是24.将这个值赋值给$h,并且$h最终的结果也是24.*/

    在本章的一开始,我们就说过”我们将描述各种类型的语句”.表达式可以成为语句,然而,并不是每一个表达式都是一个语句.既然这样,一个语句具有’expr’’;’的形式,一个表达式加上一个分号.在’$b=$a=5;’中,$a=5是一个有效的表达式,但是他不能由他自己构成一个语句.但是’$b=$a=5;’却是一个有效的语句.

    最后一个值得提起的事情是一个表达式的值的真假.在很多事件中,主要在条件执行和循环中,你对表达式的确切的值并不感兴趣,你仅仅对他是否以为着 TRUE(真)或FALSE(假)(PHP没有专门的boolean类型).在PHP中计算表达式的真假的方式同perl非常相似.任何非零的数值都是TRUE,零是FALSE!注意负数也非零,所以也为真!空字符串和字符’0’为FALSE;所有其他字符串为TRUE.对于非标量的数值(数组或对象)-如果值没有包含任何元素,则被认为为FALSE,否则为TRUE.

    PHP提供了一个完整而且强大的表达式工具,并且完全说明他已经超出了本手册的范围.关于表达式是什么,你怎么才能构造一个有效的表达市,上面的例子应该给了你一个很好的提示.贯穿这个手册的其余部分,我们将用’expr’代表有效的PHP表达式.

 

IF
    IF结构是任何语言中最重要的特性之一,PHP也包括了它。它允许进行条件判断同时执行相应的程序段。PHP中IF语句的特性和C是十分类似的:

if (expr)

statement

    在对该表达式片段的描述后,会判断表达式的值是否为真。如果表达式的值为真,PHP会执行该语句,如果该值为假,那么PHP将会跳过该语句。

 

    接下来的例子中如果$a比$b大,那么将显示“a is bigger than b”。

if ($a > $b)

print "a is bigger than b";

 

    通常的情况,是用户希望使用不只一条语句被有条件的执行。当然,在这里没有必要对每一个语句使用IF条件判断。用户可以使用一组语句来实现这个功能。例如,如果$a比$b大,那么下面的代码将显示“a is bigger than b”,同时将$a的值赋给$b。

if ($a > $b) {

print "a is bigger than b";

$b = $a;

}

 

    IF语句可以嵌套在另一个IF语句之中,利用这一点,用户可以根据不同的情况执行程序中不同的部分。

 

ELSE
    通常,可能在条件符合时希望运行某个语句,而在条件不符合时希望运行另一段程序。这就是ELSE语句的作用。ELSE扩展了IF语句的作用,当条件为假时,ELSE后面的语句将被执行。例如,接下来的程序段将在$a大于$b的时候显示“a is bigger than b”,在其他的情况下显示“a is NOT bigger than b”。

if ($a > $b) {

print "a is bigger than b";

} else {

print "a is NOT bigger than b";

}

 

    ELSE语句并不仅仅起到在IF表达式值为假的时候执行语句的作用,如果在它后面接上IF的话,就成为了ELSEIF语句,使用它可以进一步的分析假的情况(见下文)。

 

ELSEIF
 

    正如它的名字所暗示的,ELSEIF是IF和ELSE的组合。和ELSE一样它扩展了IF语句对FALSE(假)的处理。但是和ELSE不一样的是,ELSEIF将已经为假的条件再进行一次判断,并根据判断的结果进行处理。例如,下列代码在$a>$b的情况下将显示“a is bigger than b”,当$a不大于$b的时候就再进行一次判断,如果$a==$b,将显示“a is equal to b”,如果$a
if ($a > $b) {

print "a is bigger than b";

} elseif ($a == $b) {

print "a is equal to b";

} else {

print "a is smaller than b";

}

 

    在同一个IF语句中可以有多个ELSEIF语句。第一个ELSEIF表达式(if any)如果为真,那么将被执行。在PHP3中,您也可以写成“else if”(使用两个词)同时效果和使用“elseif”(一个词)是一样的。他们的语言仅仅有些微的不一样(如果您熟悉C语言的话,您会发现这个不一样和在C中类似)但是最终他们的结果是完全一样的。

 

    ELSEIF语句仅仅在IF语句或前一个ELSEIF的表达式为假,同时当前的ELSEIF语句表达式为真的情况下执行。

 

IF语句的交互语法:IF().. ..ENDIF
    PHP3提供了一种不同的方法在IF语句中建立语句组。这种方式在您将HTML嵌套进IF语句中非常常见,但是您可以将着种方法应用到任何位置。除了使用{}之外,IF表达式可以跟随一个冒号,一个或多个语句,然后使用ENDIF结尾;请注意如下的例子:

 



A = 5



 

    在上面所示的例子中,利用交互语法,HTML语句“A = 5”被嵌套进了IF语句之中。这个HTML语句会在$a为5的时候被显示。

    这种交互语法也可以应用在ELSE和ELSEIF语句之中。接下来的例子是使用交互格式的IF、ELSEIF和ELSE语句。

if ($a == 5):

print "a equals 5";

print "...";

elseif ($a == 6):

print "a equals 6";

print "!!!";

else:

print "a is neither 5 nor 6";

endif;

 

WHILE
    WHILE循环是PHP3中循环的一个简单例子。它和在C中的表现完全一样,WHILE语句基本的结构如下所示:

    WHILE(expr) statement

 

    WHILE语句的的含义是十分简单的。它告诉PHP在WHILE表达式为真的情况下反复的执行嵌套的语句。表达式的值在每一次循环开始的时候被检查,所以即使这个值在执行嵌套的语句时被更改了,执行过程将不会被终止,直到结束该次循环为止。有些情况下,WHILE表达式的值在开始就是假,那么这些嵌套的语句将一次也不会被执行。

    和使用IF语句类似,您可以在同一个WHILE循环中使用多个语句作为一个组,使用{ }或类似于下文的语法:

    WHILE(expr): statement ... ENDWHILE;

    在下面的两个例子实现的功能是相同的,即打印了从1到10的所有数字:

 

    /* example 1 */

$i = 1;while ($i
print $i++; /* the printed value would be

$i before the increment

(post-increment) */

}

 

/*example 2 */

$i = 1;

while ($i
print $i;

$i++;

endwhile;

 

DO..WHILE
    DO..WHILE循环和WHILE循环是十分类似的,除了真值检查是在每个循环过程最后进行的外。这里最主要的不同就是对于DO..WHILE循环,它和标准的WHILE循环不一样,它的第一个循环过程总是会被执行的(由于真值检查是在最后被执行的)。标准的WHILE循环中的第一个语句不一定被执行(由于真值检查是在循环开始时进行的)。

 

    这儿是使用DO..WHILE循环语句的一个例子:

$i = 0;

do {

print $i;

} while ($i>0);

 

    上文的循环仅仅会被执行一次,在第一次循环执行完毕之后,检查表达式为假($I并不比0大)此时循环就会被终止。

 

    高级的C语言使用者对使用DO..WHILE循环的不同之处会有很深的理解,为了允许在代码段的执行过程中终止执行,可以使用将他们加入DO..WHILE(0)语句中,再使用BREAK语句的方法。下面代码段说明了这一点:

do {

if ($i
print "i is not big enough";

break;

}

$i *= $factor;

if ($i
break;

}

print "i is ok";

...process i...

} while(0);

 

    如果您对这些都不是很明白的话,也不必担心。您可以在不使用这些特性的情况下编写出很强有力的代码。

 

FOR
    在PHP中FOR循环是最复杂的循环。它的特性和它在C语言中的表现类似。FOR循环的语法如下:

 

    FOR (expr1; expr2; expr3) statement

 

    第一个表达式expr1将在循环开始时无条件的被求解执行;

    在每一个循环开始的时候,第二个表达式将被执行。如果它的值为真,则该循环将继续下面嵌套语句的执行。如果它的值为假,则循环结束;

    在每个循环的最后第三个表达式将被执行。

    任何一个表达式都可以是空的,当表达式二(expr2)是空的时候,意味这这个循环运行的次数将是不确定的(PHP和C一样默认该表达式为真)。这种做法并不象您想象的那样没有用,因为在有些情况下您可能希望使用带条件的BREAK语句来取代FOR的真值判断来作为终止循环的方法。

 

    注意下面的几个例子,所有的这些语句显示了从1到10的数字:

 

/* example 1 */

for ($i = 1; $i
print $i;

}

 

/* example 2 */

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

if ($i > 10) {

break;

}

print $i;

}

 

/* example 3 */

$i = 1;for (;;) {

if ($i > 10)

{ break;

}

print $i;

$i++;

}

 

/* example 4 */

for ($i = 1; $i
 

    当然,看上去第一个例子最好(或者是第四个例子),但是您将发现在许多场合使用空表达式的FOR循环是十分方便的。

 

    在FOR循环中PHP也支持交互的“冒号语法”。例如:

    FOR (expr1; expr2; expr3): statement; ...; endfor;

 

    其他有FOR语句的语言往往使用该语句来处理数组。在PHP中使用WHILE语句和list()和each()函数来做这件事情。请参考这些函数相关的例子。

 

BREAK
    BREAD 跳出当前的循环体,提前结束循环.

$i = 0;

while ($i
if ($arr[$i] == "stop") {

break;

}

$i++;

}

 

CONTINUE
    CONTINUE结束本次循环,跳到循环体的开始处,接着进行下一次循环的判定.

while (list($key,$value) = each($arr)) {

if ($key % 2) { // skip even members

continue;

}

do_something_odd ($value);

}

 

SWITCH
    在实际问题中常常需要用到多分支的选择.你可以使用多重嵌套的IF语句来处理,但如果分支较多,则嵌套的IF语句层数多,程序冗长而且可读性降低.PHP中提供SWITCH语句来直接处理多分支选择.

    下面的两个例子使通过两种不同的方式来实现同一件事,一个使用了一系列的IF语句,另外一个使用了SWITCH语句:

 

/* example 1 */

 

if ($i == 0) {

print "i equals 0";

}

if ($i == 1) {

print "i equals 1";

}

if ($i == 2) {

print "i equals 2";

}

 

/* example 2 */

 

switch ($i) {

case 0:

print "i equals 0";

break;

case 1:

print "i equals 1";

break;

case 2:

print "i equals 2";

break;

}

 



Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template