php控制语句if else do while for

 更新时间:2016年11月25日 15:12  点击:1897

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() 函数来达到这个功能

    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;
   }

1、算术运算符

 代码如下 复制代码
  +:  $a + $b 加 $a加上$b
  -:  $a - $b 减 $a减去$b
  *:  $a * $b 乘 $a乘以$b
  /:  $a / $b 除 $a除以$b
  %:  $a % $b 取模 $a除以$b的余数


 

如果两个操作数都是整型值(字符串将被转换为整型值),除号("/") 返回整型值(整除的值)。如果任一个操作数是浮点值,则做浮点除法。

2 字符串运算符

  字符串操作符只有字符串连接符 (".")。

 代码如下 复制代码

  $a = "Hello ";
  $b = $a . "World!"; // now $b = "Hello World!"


 


3、赋值运算符

  

 代码如下 复制代码

基本的赋值运算符是 "="。

  一个赋值表达式的值就是所赋给的值。例如, 表达式 $a = 3 的值是3。 这允许你这样做一些复杂的事情:

    $a = ($b = 4) + 5; // 现在 $a 等于 9, $b为4 。

  除了基本赋值符外,还有"复合运算符"。对于所有的二进制数和字符串,允许你做变量自我复合运算。例如:

  =: $a = 3;
  +=:$a += 5; // 把$a 设成 8, 也就是: $a = $a + 5;
     $b = "Hello ";
  . :$b .= "There!"; // 把 $b 设成 "Hello There!", 就象 $b = $b . "There!";
 


4、 位运算符

 

 代码如下 复制代码

 位运算允许你对指定的数据置位或复位。


  &:与运算,$a & $b 与 $a和$b都被置位则结果被置位
  |:或运算,$a | $b 或 $a或$b有一个被置位则结果被置位
  ~:非运算,~ $a 非 $a没有被置位则结果被置位
 


5、 逻辑运算符

 

 代码如下 复制代码
and:  $a and $b 与 $a和$b同时为真则结果为真
 or :  $a or $b 或 $a或$b有一个为真则结果为真
 xor:  $a xor $b 异或 $a和$b不同时为真则结果为真
 ! :  ! $a 非 $a为假则结果为真
 &&:  $a && $b 与 $a和$b同时为真则结果为真
 ||:  $a || $b 或 $a或$b有一个为真则结果为真
 

  比较两个变量时,"与"和"或"运算有两种运算符这是以为两种运算符有不同的优先级

6、 比较运算符

  

 代码如下 复制代码

比较运算符,就象名字一样,允许你比较两个值。

  ==: $a == $b 等于 $a等于$b结果为真
  !=: $a != $b 不等于 $a不等于$b结果为真
  < : $a < $b 小于 $a小于$结果为真
  > : $a > $b 大于 $a大于$b结果为真
  <=: $a <= $b 小于等于 $a小于或等于$b结果为真
  >=: $a >= $b 大于等于 $a大于或等于$b结果为真
 

(一)、内部变量

  主要有整数(interger),浮点数(float-point numbers),字符串(string),数组(array),对象(object)。


1 初始化变量

  要在PHP中初始化变量, 你只要简单的给它赋值即可。对于大多数类型,这是最直接的。对于数组和对象,可以使用其它方法。

2 初始化数组

  数组可以使用这两种方法之一来赋值: 使用一系列连续数值,或使用array()函数构造 (见 Array functions 部分)。
  要将连续的数值加进数组,你只需将要赋值赋给不带下标的数组变量。该值会作为数组的最后元素加进数组中。
  例:


   $names[] = "Jill"; // $names[0] = "Jill"
   $names[] = "Jack"; // $names[1] = "Jack"
 

与c、perl相似,数组下标也是从0开始。

3 初始化对象

要初始化一个对象,需用new语句建立该类型的变量。

       class foo {
        function do_foo() {
          echo "Doing foo.";
                 }
            }
        $bar = new foo;
        $bar->do_foo();
 


4 变量作用域

  变量的作用域就是它的有效范围。对于大多数PHP的变量只有一个作用域。在用户自定义函数里采用局部变量作用域。函数内使用的变量被缺省设置为局部变量。例如:

     $a=1; /* global scope */
     Function Test() {
       echo $a; /* reference to local scope variable */
             }
     Test();
 

这段程序不会输出任何的东西,因为echo语句要输出局部变量 $a ,而函数内的 $a 从未被赋过值。你可能注意到这和C语言有点小小的区别,C中全局变量可以直接在函数内引用,除非它被一个局部变量所覆盖。而这使得人们可能不注意修改了全局变量的值。在PHP中要在函数内部使用全局变量必须显式的说明。例如:

       $a=1;
       $b=2;
       Function Sum() {
         global $a,$b;
         $b = $a + $b;
              }
       Sum();
       echo $b;
 

上面程序将输出"3"。通过在函数内部声明$a和$b是全局变量,所要变量都参考全局。一个函数可以操纵的全局变量的数量没有限制。
  作用域的另外一个值得注意的地方是static 变量。一个 static变量存在于局部函数中,但当程序离开这个函数时它的值不会丢失。考虑下面的例子:

     Function Test() {
       $a=0;
       echo $a;
       $a++;
       }
 

这个函数是没用的,因为每次调用时它都先把$a赋为 0 然后打出"0"。 对$a++的自加没有任何效果因为函数调用结束后变量$a 就被释放了。要使记数程序有效记数而不丢掉当前的记数结果,$a 要声名为static变量:

      Function Test() {
        static $a=0;
        echo $a;
        $a++;
      }
 

现在,每次调用Test()函数它都会打出$a的值并把增加它的值。

  当使用递归函数时静态变量是必不可少的。递归函数就是调用自己的函数。写递归函数时一定要十分小心,因为它的循环次数不确定。你必须确保有足够的条件结束递归过程。下面是一个简单的递归函数记数到10:

      Function Test() {
       static $count=0;
       $count++;
       echo $count;
       if($count < 10) {
         Test();
         }
        }
 


(二) 动态变量

  有时使用可变的变量名比较方便。就是说,一个能够被动态赋值和使用的变量名。一个普通变量的赋值语句如:

    $a = "hello";

  一个动态变量引用该变量的值作为一个新变量的名字。在上面例中, hello,可以通过双$用做变量名。例:

    $$a = "world";

至此,两个变量被定义并存贮在PHP符号树中: $a 的内容是"hello",$hello 的内容是 "world"。 因此,语句: echo "$a ${$a}"; 的显示结果完全等同于: echo "$a $hello";

(三)PHP外部变量

1、HTML表单(GET和POST)

  当一个表单提交给PHP3 script时,PHP会自动得到表单中的变量。例如:

      <form action="foo.php教程3" method="post">
      Name: <input type="text" name="name"><br>
      <input type="submit">
      </form>
 

当按下”submit”后,PHP3会自动产生变量:$name,其中包含了用户输入的所有内容。

2、IMAGE SUBMIT 变量名

  当提交一个表单时,可以通过下面标记用一副图代替标准的提交按钮:

   <input type=image src="image.gif" name="sub">

当用户点击该图时,两个附加变量sub_x和sub_y就会伴随表单一起送到server上。其中包含了用户在图上点击处的坐标。有经验的人可能注意到浏览器实际送出的名字包含一个句号而不是下划线,但PHP自动将句号转换成了下划线。

3、HTTP Cookies

  PHP支持HTTP cookies。Cookies在客户端浏览器存储数据,以此和用户保持联络或验证用户身份。你可以使用setcookie() 函数来设置cookies。 Cookies是HTTP请求头的一部分,所以必须在任何输出数据返回给用户浏览器前调用SetCookie()函数。它类似于 Header() 函数的限制。任何用户端返回的cookies都将被自动转换为标准的PHP变量,就象GET和POST方法的数据。

  如果要在一个 cookie中设置多个值,要给这个cookie的名字加上 [] ,例如:

    SetCookie("MyCookie[]","Testing", time()+3600);

  注意:新的cookie将覆盖掉你的浏览器中已有的同名cookie,除非它们具有不同的路径或域。

4、环境变量

  PHP自动将环境变量转换为普通的变量。

    echo $HOME; /* Shows the HOME environment variable, if set. */

  尽管来自GET,POST 及 Cookie结构的信息也会被自动转化为PHP的变量, 但最好明确的从环境变量中读取它们以确保获得正确的值。为此可使用 getenv() 函数。也可以通过 putenv() 函数设置变量。

变量类型转换
  PHP中不需要(也不支持)在变量定义时做显式的类型声明;一个变量的类型取决于它的值的类型。也就是说,如果你给变量var 赋了一个字符串值,var 就成为字符串变量。如果你又赋了一个整型值给var, 它就变成了一个整型变量。

  一个PHP自动类型转换的例子是加法操作符 '+'。如果任何一个操作数是double型,则所有的操作数按 double类型来计算, 结果也是double型的。否则,所有的操作数按integer类型来计算, 结果也是integer型的。注意:操作数本身的类型不发生变化;类型变换仅在计算时做

    $foo = "0"; // $foo is a string (ASCII 48)
    $foo++; // $foo is the string "1" (ASCII 49)
    $foo += 1; // $foo is now an integer (2)
    $foo = $foo + 1.3; // $foo is now a double (3.3)
    $foo = 5 + "10 Little Piggies"; // $foo is a double (15)
    $foo = 5 + "10 Small Pigs"; // $foo is an integer (15)
 

要改变变量的类型,也可用settype() 函数。

1、强制类型转换

  PHP中的强制类型转换和C中一样: 在需要进行类型强制转换的变量前的括号中写出想要的类型名。

   $foo = 10; // $foo is an integer
   $bar = (double) $foo; // $bar is a double
   允许的强制转换是:
    (int), (integer) - cast to integer
    (real), (double), (float) - cast to double
    (string) - cast to string
    (array) - cast to array  
    (object) - cast to object
 

注意:括号中可以含有tab或空格,下面的函数将被计算:

    $foo = (int) $bar;
    $foo = ( int ) $bar;
 

2、字符串转换

  当字符串作为数值类型计算时,结果的值和类型按以下方式决定。

  如果字符串中包含任何'.', 'e',及'E'字符,则被作为double类型计算。否则,就作为integer类型计算。
  该值从字符串最开始算起。如果字符串是合法的数字,则使用该值,否则值为 0 。合法的数字是一个符号位(可选),后跟一位或几位数字(也可含有一个十进制的小数点), 后跟一位可选的指数。指数是一个 'e' 或 'E'后跟一个或几个数字。

  $foo = 1 + "10.5"; // $foo is a double (11.5)
  $foo = 1 + "-1.3e3"; // $foo is a double (-1299)
  $foo = 1 + "bob-1.3e3"; // $foo is a double (1)
  $foo = 1 + "bob3"; // $foo is an integer (1)
  $foo = 1 + "10 Small Pigs"; // $foo is an integer (11)
  $foo = 1 + "10 Little Piggies"; // $foo is a double (11); the string contains 'e'
 

这只是一个小技巧,用来避免一个表单的重复提交。这样多少可以防止一些灌水的现象,另外有时候由于网络状况等原因用户不知道提交是否成功,也会再次提交同一份表单。

这个技巧的主要原理是不允许用户回退后再次提交,也就是说回退后修改再提交也是不允许的,而且也不能避免Ctrl-C/Ctrl-V的灌水办法。究竟有没有用,还是看各位站长的喜好了
你是否遇到过“重复提交”的问题?要解决这个问题其实并不难。这里有一个简单的方法避免同一表单的重复提交。
首先,我们可以定义一个session变量用来保存一个表单的提交序列号。这里我定义为“$userLastAction”。然后在表单里加入一个hidden变量,把值设为$userLastAction+1:
<input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>>
最后,在处理提交之前判断表单是否已被提交过:
if($lastAction>$userLastAction and inputIsValid(...)){
$userLastAction++; // 序列号加1
// 处理表单数据
}

原文:
Avoid multiple form submissions
Submitted By: Douglas E. Cook
Date: 07/26/00 19:46
Does your database suffer from "duplicate post" syndrome? The cure isn't too difficult. Here is a simple way to prevent users from submitting the same form multiple times.

First, declare a session variable to store a serial number for each form. I call mine "$userLastAction." Then, in every form where duplicate submission is a problem, include a hidden field, and set the value to $userLastAction+1:

<INPUT TYPE=HIDDEN NAME=lastAction VALUE=<?= $userLastAction+1 ?>>

Finally, verify that the form has not been previously submitted before acting on the submission:

if($lastAction>$userLastAction and inputIsValid(...)){
$userLastAction++; // Increment serial number
// Act on form here
}

 

[!--infotagslink--]

相关文章

  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • mysql中获取一天、一周、一月时间数据的各种sql语句写法

    创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31
  • forum.php怎么打开?

    本文介绍了forum.php的打开方法,不会的同学可以参考一下。 虚拟空间,网页管理端, 会有一个默认访问页面(找一下,是这个意思,可能会有所不同),内容一般是 index.html index...2017-07-06
  • C#中while循环语句用法实例详解

    这篇文章主要介绍了C#中while循环语句用法,以实例形式详细分析了while语句的用法,并对return,continue,break的区别做了进一步的分析,需要的朋友可以参考下...2020-06-25
  • Vue.js中轻松解决v-for执行出错的三个方案

    v-for标签可以用来遍历数组,将数组的每一个值绑定到相应的视图元素中去,下面这篇文章主要给大家介绍了关于在Vue.js中轻松解决v-for执行出错的三个方案,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2017-06-15
  • Javascript for in的缺陷总结

    这篇文章主要介绍了Javascript for in的缺陷总结的相关资料,需要的朋友可以参考下...2017-02-08
  • C#条件语句、循环语句(if、while)

    这篇文章主要介绍了C#条件语句、循环语句(if、while)的用法,学习c#的朋友可以参考下...2020-06-25
  • shell脚本实战-while循环语句

    这篇文章主要介绍了shell脚本实战-while循环语句,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-09
  • Navicat for MySQL 11注册码\激活码汇总

    Navicat for MySQL注册码用来激活 Navicat for MySQL 软件,只要拥有 Navicat 注册码就能激活相应的 Navicat 产品。这篇文章主要介绍了Navicat for MySQL 11注册码\激活码汇总,需要的朋友可以参考下...2020-11-23
  • shell中的for循环用法详解

    这篇文章主要介绍了shell中的for循环用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-11
  • c# 循环语句的使用方法

    这篇文章主要介绍了c# 循环语句的使用方法,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • Mysql 原生语句中save or update 的写法汇总

    背景&#8195;&#8195;在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert。 如果使用Hibernate,它自带saverOrUpdate方法,用起来很方便,但如使用原生sql语句呢? &#8195;...2015-03-15
  • Python While循环语句实例演示及原理解析

    这篇文章主要介绍了Python While循环语句实例演示及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-30
  • 如何利用JavaScript编写更好的条件语句详解

    这篇文章主要给大家介绍了关于如何利用JavaScript编写更好的条件语句的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-08-10
  • jquery if条件语句的写法

    下面小编就为大家带来一篇jquery if条件语句的写法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • C#实现String字符串转化为SQL语句中的In后接的参数详解

    在本篇文章中小编给大家分享的是一篇关于C#实现String字符串转化为SQL语句中的In后接的实例内容和代码,需要的朋友们参考下。...2020-06-25
  • Python基础之循环语句相关知识总结

    今天给大家带来的是关于Python基础的相关知识,文章围绕着Python循环语句展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下...2021-06-15
  • python for循环赋值问题

    这篇文章主要介绍了python for循环赋值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-03
  • vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作

    这篇文章主要介绍了vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-10
  • Nginx中if语句的判断条件与多条件判断详解

    这篇文章主要介绍了关于Nginx中if语句的判断条件与多条件判断的相关资料,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。...2017-07-06