PHP中的switch语句的用法实例详解


Posted in PHP onOctober 21, 2015

switch是一个开关语句,那么很多朋友都只知道简单的switch开关语句的用法了,下面一聚教程小编就为各位详细的介绍一下switch用法例子吧。

只所以称为“高级”用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实还是它的基础用法!

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, '<br/>';
echo return_bytes($memorylimit);
输出:
400M
419430400

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

以上就是本文的全部叙述,希望对大家学习switch用法有所帮助。

PHP 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
配置支持SSI
Nov 25 PHP
php ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
PHP中is_file不能替代file_exists的理由
Mar 04 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
PHP命名空间定义与用法实例分析
Aug 14 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
PHP 实现的将图片转换为TXT
Oct 21 #PHP
PHP实现清除wordpress里恶意代码
Oct 21 #PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 #PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 #PHP
PHP页面转UTF-8中文编码乱码的解决办法
Oct 20 #PHP
php限制文件下载速度的代码
Oct 20 #PHP
php获取远程文件大小
Oct 20 #PHP
You might like
PHP新手上路(十四)
2006/10/09 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
python操作excel的方法
2018/08/16 Python
python实现小球弹跳效果
2019/05/10 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
浅析Python中字符串的intern机制
2020/10/03 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
2014年公司迎新年活动方案
2014/02/24 职场文书
优秀会计求职信
2014/07/04 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
全陪导游词
2015/02/04 职场文书
单位接收证明格式
2015/06/18 职场文书