PHP 循环控制语句几种方法详解

 更新时间:2016年11月25日 15:01  点击:1660
在php中循环语句一般是使用while,for,foreach而控制语句就是if swicth这些了,下面我来给大家介绍一下php循环控制语句用法吧。

1、if..else循环有三种结构第一种是只有用到if条件,当作单纯的判断。

解释成"若发生了某事则怎样处理"。
语法如下:if(expr){statement}其中的expr为判断的条件,通常都是用逻辑运算符号当判断的条件。
而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号{}。
范例:本例省略大括号。

 代码如下 复制代码
<?php
if($state==1)
echo"哈哈";
?>

这里特别注意的是,判断是否相等是==而不是=,ASP程序员可能常犯这个错误,=是赋值。
范例:本例的执行部分有三行,不可省略大括号。

 代码如下 复制代码
<?php
if($state==1){
echo"哈哈;
echo"<br>";
}
?>

第两种是除了if之外,加上了else的条件,可解释成"若发生了某事则怎样处理,否则该如何解决"。
语法如下:

 代码如下 复制代码
if(expr){
statement1
}else{
statement2
}

范例:上面的例子来修改成更完整的处理。
其中的else由于只有一行执行的指令,因此不用加上大括号。

 代码如下 复制代码
<?php
if($state==1){
echo"哈哈";
echo"<br>";
}else{
echo"呵呵";
echo"<br>";
}
?>

第三种就是递归的if..else循环,通常用在多种决策判断时。
它将数个if..else拿来合并运用处理。
直接看下面的例子

 代码如下 复制代码
<?php
if($a>$b){
echo"a比b大";
}elseif($a==$b){
echo"a等于b";
}else{
echo"a比b小";
}
?>

上例只用二层的if..else循环,用来比较a和b两个变量。
实际要使用这种递归if..else循环时,请小心使用,因为太多层的循环容易使设计的逻辑出问题,或者少打了大括号等,都会造成程序出现莫名其妙的问题。
2、for循环就单纯只有一种,没有变化,它的语法如下
for(expr1;expr2;expr3){statement}
其中的expr1为条件的初始值。
expr2为判断的条件,通常都是用逻辑运算符号(logicaloperators)当判断的条件。
expr3为执行statement后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。
而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号{}。
下例是用for循环写的的例子。

 代码如下 复制代码
<?php
for($i=1;$i<=10;$i
){
echo"这是第".$i."次循环<br>";
}
?>

3、switch循环,通常处理复合式的条件判断,每个子条件,都是case指令部分。
在实作上若使用许多类似的if指令,可以将它综合成switch循环。语法如下

 代码如下 复制代码
switch(expr){
caseexpr1:
statement1;
break;
caseexpr2:
statement2;
break;
default:
statementN;
break;
}

其中的expr条件,通常为变量名称。
而case后的exprN,通常表示变量值。
冒号后则为符合该条件要执行的部分。
注意要用break跳离循环。

 代码如下 复制代码
<?php
switch(date("D")){
case"Mon":
echo"今天星期一";
break;
case"Tue":
echo"今天星期二";
break;
case"Wed":
echo"今天星期三";
break;
case"Thu":
echo"今天星期四";
break;
case"Fri":
echo"今天星期五";
break;
default:
echo"今天放假";
break;
}
?>

这里需要注意的是break;
别遗漏了,default,省略是可以的。
很明显的,上述的例子用if循环就很麻烦了。
当然在设计时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。
上例由于每天出现的机率相同,所以不用注意条件的顺序。

php循环控制语句
1、While语句

 代码如下 复制代码
While循环是php中最简单的循环语句,他的语法格式是:
While (expression){
statement;
}

当表达式expression的值为真时,将执行statement语句,执行结束后,再返回到expression表达式继续进行判断。直到表达式的值为假时,才跳出循环。
实例:

 代码如下 复制代码
<?php
$num = 1;
$str = “10以内的偶数为:”;
while($num <=10){
if($num % 2 == 0){
$str.=$num.”";
}
$num++;
}
echo $str;
?>

2、Do…While语句
While语句还有一种形式的表示,Do…While.语法为:
Do{
statement;
}While(expression);
两者的区别在于:Do…While语句要比While语句多循环一次。
当While表达式的值为假时,While循环直接跳出当前循环,而Do…While语句则是先执行一遍程序块,然后再对表达式进行判断。
3、For语句

 代码如下 复制代码
For循环是php中最复杂的循环结构,它的语法格式为:
For(expression1;expression2;expression3){
statement;
}

其中:expression1在第一次循环时无条件取一次值。
expression2在每次循环开始前求值,如果值为真,则执行statement;否则跳出循环,继续往下执行。expression3为每次循环后被执行。
实例:

 代码如下 复制代码
<?php
$num=1;
for($i=1;$i<=100;$i++){
$num *=$i;
}
echo $num;
?>

4、Foreach语句
Foreach循环是php4.0引进来的,只能用于数组。在php5中,又增加了对对象的支持。该语句的语法格式为:
foreach(array_expression as $value)
statement;

Foreach(array_expression as $key => $value)
statement;
Foreach语句将遍历数组array_expression,每次循环时,将当前数组中的值赋给$value(或是将数组下表赋给$key、对应的数组值赋给$value),同时,数组指针向后移动,如此反复循环,直到遍历结束。当使用Foreach语句时,数组指针将自动被重置,所以不需要手动设置指针位置。实例

 代码如下 复制代码
<?php
$arr=array(“We”,”are”,”the”,”best”,”team”,”!”);
if(is_array($arr) == true){
foreach($arr as $key => $value){
echo $key.”=”.$value.”<br>”;
}
}else{
echo”该变量不是数组,不能使用foreach语句”;
}
?>
在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧。

php如何获取数组的长度,使用php函数count(),或是sizeof()

例如:

 代码如下 复制代码

$arr = Array('0','1','2','3','4');
echo count($arr);

// 输出 5

 

$arr = array('A','B','C');

echo sizeof($arr);

//输出3


sizeof()和count()具有同样的用途,这两个函数都可以返回数组元素个数.可以得到一个常规标量变量中的元素个数,如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0;


两函数功能一样,手册上讲,sizeof()是函数count()的别名。

那么多维数组长度要怎么统计呢?


大家可参考:http://www.111cn.net/phper/21/32805.htm

关于switch与ifelse的区别我们不用介绍了,这里我来给大家介绍switch与ifelse性能吧,到底什么时候更适合使用switch还是ifelse呢。

PHP中有两个方法都是用于判断值是否满足条件,如果满足/不满足做出不同行为动作。

 不管写什么语言的程序,一定会考虑到代码的运行效率问题。在查阅了一些资料后,switch与ifelse在不同的‘环境’下效率各有优胜。

1、当被判断的值是常量(固定不变的值)时,switch的运行效率比ifelse的运行效率高;

 代码如下 复制代码

$changliang=3;             // 变判断的值为常量
switch($changliang){
    case 1:
        echo '常量值为1';
        break;             // 跳出循环
    case 2:
        echo '常量值为2';
        break;
    case 3:
        echo '常量值为3';
        break;
}

 2、当被判断值为变量,ifelse的运行效率高于switch,ifelse贯彻一判到底的方针,会从第一个条件开始判断,直到最后一个else,所以学会使用switch有好处;

 代码如下 复制代码

$a = $_GET['a'];            // 通过get传值后接值; 被判断的值
if($a=1){
    echo '变量a的值为1';
}elseif($a=2){
    echo '变量a的值为2';
}elseif($a=3){
    echo '变量a的值为3';
}else{
    echo '变量a的值为不知道';
}

在php中如果我们要定义常量有很多方法,但在类中我们要定义常量多半会用到const常量修饰符来定义了,下面小编来给各位同学介绍一下操作办法。

在PHP中定义常量是通过define()函数来完成的,但在类中定义常量不能使用define(),而需要使用const修饰符。类中的常量使用const定义后,其访问方式和静态成员类似,都是通过类名或在成员方法中使用self访问,但在PHP 5.3.0之后也可以使用对象来访问。被const定义的常量不能重新赋值,如果在程序中试图改变它的值将会出现错误。

 代码如下 复制代码

<?php 

     class MyClass { 

           const CONSTANT = 'CONSTANT value' ; //使用const声明一个常量,并直接赋上初使值 

              function showConstant() {                

                   echo  self ::CONSTANT ."<br>" ;//使用self访问常量,注意常量前不要加“$” 

             } 

      } 

      echo MyClass:: CONSTANT . "<br>" ; //在类外部使用类名称访问常量,也不要加”$” 

      $class = new MyClass();                      

     $class->showConstant();                       

      echo $class ::CONSTANT;  // PHP 5.3.0之后 

?>

关注细节:使用const定义的常量名称前不需要使用“$“符号,且常量名称通常都是大写的。

试图为const定义的常量赋值,将会出现错误。

 代码如下 复制代码

<?php 

  class MyClass { 

           const CONSTANT = 'CONSTANT value' ;   

               function setCONSTANT(){ 

                self ::CONSTANT  = 'news CONSTANT' ;//程序运行结果将会出错。 

     }                                                                                  

      } 

      echo MyClass:: CONSTANT ;                                                     

?>

程序运行结果将会出错。


使用const修饰的常量更其它的常量 有点不同的地方就是:常量名前不要使用”$”,切记!当然这个常量值也是不能修改的,一旦定义就不能程序的任何地方进行“人为”的修改。这跟使用 define定义是一样,还有就是使用const来定义当然也遵守其它常量的命名规则


扩展阅读:

常量前面没有美元符号($);
常量只能用 define() 函数定义,而不能通过赋值语句;
常量可以不用理会变量范围的规则而在任何地方定义和访问;
常量一旦定义就不能被重新定义或者取消定义;
常量的值只能是标量;
常量只能包含标量数据(boolean,integer,float 和 string),不要定义 resource常量.
可以用函数 constant() 来读取常量的值.get_defined_constants()可以获得所有已定义的常量列表.
如果使用了一个未定义的常量,PHP 假定想要的是该常量本身的名字,如同用字符串调用它一样(CONSTANT 对应 “CONSTANT”),此时将发出一个 E_NOTICE 级的错误.
PHP 的“魔术常量”.

名称

说明

__LINE__

文件中的当前行号。

__FILE__

文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

__FUNCTION__

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

__CLASS__

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

__METHOD__

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

本文章来给各位同学介绍在php类中我们会常用到this 关键字了,下面我简单的分析一下在php面向对象 $this关键字用法希望此教程对各位同学会有所帮助呀。

在前面我们知道,在对象外部访问对象成员属性和方法,使用对象的引用来完成。而在对象内部中,成员方法访问自己对象中的其它成员属性或者成员方法,要使用特殊的对象引用"$this->值"的形式来访问,成员属于哪个对象,$this引用就代表哪个对象,并且只能在对象的成员方法中使用。

为了解决php类和对象中变量与属性的命名冲突和不确定性问题,引入了”$this”关键字来调用当前的对象。

在类中调用当前对象的属性和方法,必须使用”$this->”关键字;$this在构造函数中指该构造函数所创建的新对象;方法内的局部变量不属于对象,不使用$this关键字取值。使用$this关键字,我们可以在类中调用对象属性或者方法。

1、调用变量

实例:

 代码如下 复制代码
<?php
 class user{
  private $n;
  function __construct(){
   $name="Mike";
   echo $this->n=$name;
  }
 }
 $p=new user();
?>

2、调用方法

实例:

 代码如下 复制代码

<?php
 class cal{
  public function sum($a,$b){
   return $a+$b;
  }
  public function prt($a,$c){
   return $a*$c;
  }
  public function result($a,$b,$c){
   $a=$this->sum($a,$b);
   return $this->prt($a,$c);
  }
 }
 $c=new cal();
 echo "(2+3)*10= " .$c->result('2','3','10');
?>


我们来看一下下面的例子,$this在做了什么?

 代码如下 复制代码
class Person{
//下面是人的成员属性
var $name; //人的名子
var $sex; //人的性别
var $age; //人的年龄
//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//这个人可以说话的方法, 说出自己的属性
function say() {
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>";
}
//对象克隆时自动调用的方法, 如果想在克隆后改变原对象的内容,需要在__clone()中重写原本
的属性和方法
function __clone(){
//$this指的复本p2, 而$that是指向原本p1,这样就在本方法里,改变了复本的属性。
$this->name="我是假的$that->name";
$this->age=30;
}
}
$p1=new Person("张三", "男", 20);
$p2=clone $p1;
$p1->say();
$p2->say();
?>

上例输出:

执行结果
我的名子叫:张三性别:男我的年龄是:20
我的名子叫:我是假的张三性别:男我的年龄是:30

我们来看一下上面的代码中$this做了什么:

1、访问对象内部的成员,如$this->name

2、访问对象的其它方法,如在say()方法内部访问了其之外的$this->run()和$this->eat("apple")方法。

另外还有一点值得注意的是,局部变量和成员属性可以同名,但作用范围和访问方式不一样,如在eat()方法体内的$name相当于局部变量,其作用范围只限于eat方法内部,而Person的成员属性声明部分的 $name,则相当于全局变量,可以其它方法中使用$this->name的形式访问。

 代码如下 复制代码

< ?php  
class UserName 
{  
//定义属性  
private $name; 
//定义构造函数 
function __construct( $name ) 

$this->name = $name;
//这里已经使用了this指针 

//析构函数 
function __destruct(){}  
//打印用户名成员函数 
function printName() 

print( $this->name );
//又使用了PHP关键字this指针 

}  
//实例化对象 
$nameObject = new UserName
( "heiyeluren" );  
//执行打印 
$nameObject->printName();
 //输出: heiyeluren 
//第二次实例化对象 
$nameObject2 = new UserName( "PHP5" ); 
//执行打印 
$nameObject2->printName(); //输出:PHP5 
?>

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • 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
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • Java8处理List的双层循环问题

    这篇文章主要介绍了Java8处理List的双层循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-19
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • jquery中常用的SET和GET$(”#msg”).html循环介绍

    复制代码 代码如下: $(”#msg”).html(); //返回id为msg的元素节点的html内容。 $(”#msg”).html(”new content“); //将“new content” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content $(”...2013-10-13
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25