php的控制语句


Posted in PHP onOctober 09, 2006

1、IF语句

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

if (expr)

statement

正如在表达式中所论述, expr 被计算为它的真值。如果 expr 为TRUE, PHP执行相应语句, 如果为FALSE 则忽略它。

如果$a 大于 $b,下例将显示 \'a is bigger than b\':

if ($a > $b)

print \"a is bigger than b\";

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

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

2、 ELSE语句

通常你希望满足特定条件时执行一条语句,不满足条件是执行另一条语句。ELSE就是用来做这个的。ELSE 扩展IF语句,在IF语句表达式为FALSE时执行另一条语句。例如, 下面程序执行如果 $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\";

 }

 3、 ELSEIF语句

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

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

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

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

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;

 

4、 WHILE语句

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

WHILE(expr) statement

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

 WHILE(expr): statement ... ENDWHILE;

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

/* example 1 */

 $i=1;

 while ($i<=10) {

 print $i++; /* the printed value would be $i before the increment (post-

 

  increment) */

}

/* example 2 */

 $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:

 /* example 1 */

for ($i=1; $i<=10; $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++;

 }

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

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

7、 SWITCH选择语句

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

 }

(二)、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]);

}

(四)、 函数

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

 function foo( $arg_1, $arg_2, ..., $arg_n ) {

 echo \"Example function.\\n\";

 return $retval; 

}

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

 1、 函数返回值

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

function my_sqrt( $num ) {

 return $num * $num;

 }

echo my_sqrt( 4 ); // outputs \'16\'.

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

function foo() {

 return array( 0, 1, 2 );

 }

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

2、 参数

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

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

3、 关联参数

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

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

function foo( &$bar ) {

$bar .= \' and something extra.\';

 }

$str = \'This is a string, \';

foo( $str );

echo $str; // outputs \'This is a string, and something extra.\'

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

function foo( $bar ) {

$bar .= \' and something extra.\';

 }

$str = \'This is a string, \';

foo( $str );

echo $str; // outputs \'This is a string, \'

foo( &$str );

echo $str; // outputs \'This is a string, and something extra.\'

4、 默认值

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

function makecoffee( $type = \"cappucino\" ) {

echo \"Making a cup of $type.\\n\";

 }

echo makecoffee();

echo makecoffee( \"espresso\" );

上边这段代码的输出是:

Making a cup of cappucino.

Making a cup of espresso.

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

 5、CLASS(类)

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

 <?php

class Cart {

var $items; // Items in our shopping cart

// Add $num articles of $artnr to the cart

function add_item($artnr, $num) {

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

 }

// Take $num articles of $artnr out of the cart

function remove_item($artnr, $num) {

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

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

return true;

 } else {

 return false;

}

 }

 }

?>

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

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

 $cart = new Cart;

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

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

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

class Named_Cart extends Cart {

var $owner;

function set_owner($name) {

$this->owner = $name;

 }

 }

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

 $ncart = new Named_Cart; // Create a named cart
 $ncart->set_owner(\"kris\"); // Name that cart
 print $ncart->owner; // print the cart owners name
 $ncart->add_item(\"10\", 1); // (inherited functionality from cart)

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

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

class Auto_Cart extends Cart {

function Auto_Cart() {

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

  }

  }

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

class Constructor_Cart {

 function Constructor_Cart($item = \"10\", $num = 1) {

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

}

 }
 

 // Shop the same old boring stuff.

$default_cart = new Constructor_Cart;

// Shop for real...

$different_cart = new Constructor_Cart(\"20\", 17);

  

  

PHP 相关文章推荐
一个php作的文本留言本的例子(一)
Oct 09 PHP
一个php作的文本留言本的例子(六)
Oct 09 PHP
PHP源代码数组统计count分析
Aug 02 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 PHP
PHP4 与 MySQL 交互使用
Oct 09 #PHP
Access数据库导入Mysql的方法之一
Oct 09 #PHP
做一个有下拉功能的留言版
Oct 09 #PHP
留言板翻页的实现详解
Oct 09 #PHP
聊天室php&amp;mysql(二)
Oct 09 #PHP
聊天室php&amp;mysql(一)
Oct 09 #PHP
建立文件交换功能的脚本(三)
Oct 09 #PHP
You might like
PHP 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php简单的会话类代码
2011/08/08 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
JavaScript触发器详解
2007/03/10 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
金融专业推荐信
2013/11/14 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
大学生表扬信范文
2014/01/09 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
详解TypeScript的基础类型
2022/02/18 Javascript