我们之前给大家介绍了关于php中switch语句的介绍,我们都知道php中switch语句是循环语句,是一个开关语句,那么很多朋友都只知道简单的switch开关语句的用法了,今天就带大家了解一下php中switch语句的使用详解!

switch 语句和具有同样表达式的一系列的 IF 语句相似。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch 语句的用途。

注意: 注意和其它语言不同,continue 语句作用到 switch 上的作用类似于 break。如果在循环中有一个 switch 并希望 continue 到外层循环中的下一个轮回,用 continue 2。

下面两个例子使用两种不同方法实现同样的事,一个用一系列的 if 语句,另一个用 switch 语句:

Example #1 switch 结构<?php

if ($i == 0)

{

echo "i equals 0";

}

elseif ($i == 1)

{

echo "i equals 1";

}

elseif ($i == 2)

{

echo "i equals 2";

}

switch ($i)

{

case 0:

echo "i equals 0";

break;

case 1:

echo "i equals 1";

break;

case 2:

echo "i equals 2";

break;

}

?>

Example #2 switch 结构可以用字符串<?php

switch ($i)

{

case "apple":

echo "i is apple";

break;

case "bar":

echo "i is bar";

break;

case "cake":

echo "i is cake";

break;

}

?>

重点:(这就是我先前一直没掌握的地方!)

为避免错误,理解 switch 是怎样执行的非常重要。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。仅当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句,直到 switch 的程序段结束(如 return 语句)或者遇到第一个 break 语句为止。如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段。例如:<?php

switch ($i)

{

case 0:

echo "i equals 0";

case 1:

echo "i equals 1";

case 2:

echo "i equals 2";

}

?>

特别说明:这里如果 $i 等于 3,PHP不会执行任何echo语句!但是,如果 $i 等于 0,PHP 将执行所有的 echo 语句!如果 $i 等于 1,PHP 将执行后面两条 echo 语句。只有当 $i 等于 2 时,才会得到“预期”的结果——只显示“i equals 2”。所以,别忘了 break 语句就很重要(即使在某些情况下故意想避免提供它们时)。

[效率]在 switch 语句中条件只求值一次并用来和每个 case 语句比较。在 elseif 语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用 switch 语句可能会快一些。

在一个 case 中的语句也可以为空,这样只不过将控制转移到了下一个 case 中的语句。<?php

switch ($i)

{

case 0:

case 1:

case 2:

echo "i is less than 3 but not negative";

break;

case 3:

echo "i is 3";

}

?>

一个 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情况。例如:<?php

switch ($i)

{

case 0:

echo "i equals 0";

break;

case 1:

echo "i equals 1";

break;

case 2:

echo "i equals 2";

break;

default:

echo "i is not equal to 0, 1 or 2";

}

?>

case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除引用成为简单类型。

【实战】 根据上面的知识点,编写这么一个函数:计算容量值实际代表的字节数<?php

/**

* 返回字节数

*

* @param string $val 如 400M

*/

function return_bytes($val = '')

{

$val = trim($val);

$last = strtolower($val{strlen($val)-1});

switch ($last)

{

case 'g':

$val *= 1024;

case 'm':

$val *= 1024;

case 'k':

$val *= 1024;

}

return $val;

}

$memorylimit = ini_get('memory_limit');

echo $memorylimit, '
';

echo return_bytes($memorylimit);

输出:400M

419430400

特别说明:

$val = 400M时,case 'm' 被命中,其下的 $val *= 1024; 被执行,但因为没有 break 语言,所以会继续命中 case 'k',并执行其下的 $val *= 1024;语句,so,总体上相当于执行了 400 * 1024 * 1024 。

总结:

相信小伙伴们通过本文学习,对php中的switch语句有一定的认识和了解,希望对你的工作有所帮助!

相关推荐:

php中switch语句的理解,php中switch语句的使用详解相关推荐

  1. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

    Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...

  2. php self this static,PHP 中 self、static、$this 的区别和后期静态绑定详解

    本篇文章给大家分享的内容是关于PHP 中 self.static.$this 的区别和后期静态绑定详解,有着一定的参考价值,有需要的朋友可以参考一下 self.static 和 $this 的区别 为 ...

  3. java构造块_java中的静态代码块、构造代码块、构造方法详解

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  4. (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解

    转: https://www.cnblogs.com/Jeely/p/10762152.html web.xml 中的listener. filter.servlet 加载顺序及其详解 一.概述 1. ...

  5. nmmqq.php?/lspc.html,html中的图片直接使用base64编码后的字符串代替详解

    网页中的图片是使用base64编码后的字符串代替了,这个叫做Data URI scheme,下面有个不错的示例,大家可以参考下 最近来了一个网页,里面有图片,但是却没有引用外部的图片资源,很好奇.查看 ...

  6. python使用视频_Python中操作各种多媒体,视频、音频到图片的代码详解

    我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑.字幕编辑.分离音频.视频音频混流等.又比如对音频文件的操作:音频剪辑,音频格式转换.再比如我们最常用的图片文件,格式转换.各 ...

  7. java ant解压缩_java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

    java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解 发布于 2020-4-7| 复制链接 摘记: java ant包中的org.apache.tools.zip实现 ...

  8. 多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解

    多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解 1. 概览 在开始具体讨论卡尔曼滤波和匈牙利算法之前,首先我们来看一下基于检测的目标跟踪算法的大 ...

  9. 站长在线Python精讲:在Python中使用split()方法分割、使用join()方法合并字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用split()方法分割.使用join()方法合并字符串详解>.本知识点主要内容有:在Python中使用s ...

  10. java中isblank 方法_StringUtils中的isEmpty、isNotEmpty、isBlank和isNotBlank的区别详解

    一.StringUtils中的isEmpty方法 1.StringUtils中的isEmpty方法中的源码如下: 注:由源码可知(判断某字符串是否为空,为空的标准是str==null或str.leng ...

最新文章

  1. Ajax+jquery实现异步验证用户名功能
  2. RabbitMQ Topic交换机(生产者)
  3. SqlBulkCopy 批量复制数据到数据表
  4. Effective Modern C++ 第一章 C++11/14/17中的类型推断
  5. Java初学者可以实现的简单小程序(建议收藏学习)
  6. [转bbs]师大女生VS川大女生
  7. IT 如何把骨干留住
  8. 火焰纹章16进制是怎么算_火焰是值得你的时间
  9. clone别人远程仓库的代码,运行npm install报错npm ERR! Maximum call stack size exceeded
  10. java通过struts实现web中的文件上传
  11. Unity跑酷游戏的无尽关卡是如何生成的?
  12. Hall定理及其充要性证明
  13. 『阶段总结』研一目标
  14. FCPX超级慢动作变速插件Twixtor Pro 7 Mac破解版激活教程
  15. iOS中使用c函数快速获取一个目录所占的空间大小
  16. 如何在jsp中连接SQLserver数据库
  17. linux转换flv文件格式,安装和使用ffmpeg转换视频为flv文件(windows和linux)
  18. 精灵混合加密系统_为什么要加密数据?
  19. 华为交换机dot1x配置认证方式
  20. Vue中常用的8种v指令

热门文章

  1. 【浏览器兼容性】如何隐藏微软的ie和edge浏览器密码输入框的小眼睛
  2. 自定义gerrit提交脚本
  3. 决策树常见的面试点整理
  4. 如何查询期刊的中科院分区
  5. GPT专业应用:如何让GPT策划方案
  6. 【无人机三维路径规划】基于A算法解决三维路径规划问题含危险障碍地形含Matlab源码
  7. 因为现在的手机大部分都不能换电池,是不是手机使用1至2年就需要更换了?...
  8. 了解源代码管理工具——Github
  9. Cutting a Rod
  10. pandas的is in和not in