php流程控制语句以及条件判断中的数据类型转换
来源:互联网 发布:淘宝的安利是真的吗 编辑:程序博客网 时间:2024/05/03 03:51
php的流程控制语句包括循环体语句和分支判断语句。
循环操作包括三组语句,分别是while、do-while、for循环。
分支判断体包括两组:if else语句、switch语句。
以下以几个题目来理解php流程控制语句以及条件判断中的数据类型转换。
***********************************************
题目一、if-else语句与条件判断涉及的数据类型转换
***********************************************
<?php/*习题*//*1。写出下列代码的运行结果*/if(5<4)echo "true";elseecho "false-1"."<br />";if("0")echo "true";elseecho "false-2"."<br />";if($i)echo "true";elseecho "false-3"."<br />";if("false")echo "true";elseecho "false-4"."<br />";if(false)echo "true";elseecho "false-5"."<br />";if(0.0)echo "true";elseecho "false-6"."<br />";if(php)echo "true";elseecho "false-7"."<br />";if("")echo "true";elseecho "false-8"."<br />";if(null)echo "true";elseecho "false-9"."<br />";if(array(12))echo "true";elseecho "false-10"."<br />";if(array())echo "true";elseecho "false-11"."<br />";/*输出结果:false-1false-2false-3true false-5false-6true false-8false-9true false-11分析:if语句当条件不满足(即条件表达式计算结果为false)都会返回假。php的if语句没有then,有elseif(同else if)当转换为boolean时候,以下值被认为是false:1)布尔值false;2)整型值0(零);3)浮点型值0.0(零);4)空白字符串和字符串“0”;5)没有成员变量的数组;6)没有单元的对象(仅适用于PHP4);7)特殊类型NULL(包括尚未设定的变量);*/?>
***********************************************
题目二、switch-case-default语句与break语句的关系
***********************************************
<?php/*2。写出下列代码的运行结果*/$a = "linux";switch($a){//echo "hello";case 'lamp':echo "one";break;case php:echo "five";break;case 'linux'://用不用引号均可echo "six"."<br />";case 6:echo "??";case '8':echo "|||";case 10:echo "10"."<br />";break;//如果去掉此break将输出default分支的@@default:echo "@@";break;}/*运行结果为:six??|||10分析:请注意以上switch-case-default语句中,有的地方是没有break语句的。①default在所有case开关中,总是最后执行。②一旦switch的条件判断进入了一个开关(包括default),如果这个开关里面没有break跳出语句,则这个开关之后的语句被当做普通程序语句来执行,直到遇到break为止(比如:如果条件满足了case 2开关,而case 2开关里面没有break语句,则case 2之后的语句被当做普通程序语句执行,case判断不再有效。)。而如果进入的这个开关里面有break语句,则执行完之后就跳出switch。③当前一语句的case语句为空时候,控制器自动转移到下一case语句。由此可见,使用switch的时候,如果case里面没有break,这个程序是相当危险的,这其中潜伏着的漏洞即使经验丰富的测试人员也可能很难发现。参考w3school的解释:工作原理: 1、对表达式(通常是变量)进行一次计算 2、把表达式的值与结构中 case 的值进行比较 3、如果存在匹配,则执行与 case 关联的代码 4、代码执行后,break 语句阻止代码跳入下一个 case 中继续执行 5、如果没有 case 为真,则使用 default 语句*/?>
***********************************************
题目三、switch-case-default语句和数据类型自动转换的问题
***********************************************
<?php /*3。写出下列代码的运行结果*/$a = "abc"; switch ($a) {case 0: echo "a 为 0";break;case "cdef": echo "a 为 cdef";break;case "abc": echo "a 为 abc";break;default:echo "a 什么都不是";break;}/*输出结果:a 为 0分析:这个问题应该从PHP作为动态脚本语言说起:动态语言的变量类型是随存储的变量而变化的,即变量类型是根据具体环境而进行变化的。字符串"abc",从表面来看可能指确切字符串,但是对于PHP存储的时候它是不能确定的,因为随着语义的变化,其所起的作用也会变化第一个case 0:,PHP脚本将常量0解释为确切的整数,与字符串比较大小时,需要将字符串转换为整数。PHP脚本解释器会自动将字符串abc,从十进制(默认)转换为数字,但是abc很明显不能代表十进制数,即转换失败,此时PHP将结果置为0,如果将字符串表示为"0xabc",那么PHP脚本能够发现0x标识,将abc作为十六进制转换,所以能够得到abc标识的十六进制整数。如果学过C语言,可以做一个简单比较:C中的case必须是数字常量,而不能是字符串,就因为C是变量类型确定的,运行时不能将确定的变量按语义随意转换。而PHP可以,因为PHP语言是动态的,变量类型是动态的。或者从PHP的例子中学习:如果一个文件将111111字符串(不是数字)存储到文件,然后从文件直接读取到变量$a,如下语法就可以将$a作为整数计算:0+$a上述表达式得到的结果也可以作为动态语言的一个变现来看*/?>
***********************************************
题目四、编程中的疏忽易错点——比较运算符和赋值运算符的差异
***********************************************
<?php /*4。写出下列代码的运行结果*/if($i = ""){echo "a";}else {echo "b";}/* 输出结果:b这里的条件表达式不是比较运算符==,而是赋值运算符=,显然,空字符串和字符串0都为false。*/?>
通过以上四个例子,我们在php基础语法的前提下,更好的理解php语言在使用中的规则,尤其是php流程控制语句以及条件判断中的数据类型转换。这些知识的掌握有利于养成良好的代码编写习惯,规避一些现实中的陷阱,提高开发效率。
- php流程控制语句以及条件判断中的数据类型转换
- php布尔型数据类型以及流程控制的数据类型转换
- 数据类型转换与java中的流程控制语句
- shell中的条件判断与控制流程
- PHP 流程控制 判断 循环语句
- C#中的主要流程控制语句之条件语句
- Shell编程之流程控制语句(条件判断)
- vb.net 教程 2-1 流程控制:条件判断语句
- php条件控制语句
- java流程控制条件判断
- PHP流程控制语句
- PHP流程控制语句
- PHP流程控制语句
- PHP流程控制语句
- Py中的条件判断,if语句总结以及常见错误
- 流程控制语句(条件语句)
- 【C#】流程控制语句-条件语句
- 自学php-条件控制语句
- 苹果信息推送服务(Apple Push Notification Service)使用总结 .
- 文档编写摘要
- Firefox 对于 jQuery 的 ready函数的兼容问题尝试解决办法
- MySQL获取系统当前时间的函数
- duilib学习笔记
- php流程控制语句以及条件判断中的数据类型转换
- 实战项目:通过当当API将订单抓取到SAP(一)
- 百度地图SDK for Android【路径规划】
- 未来智慧城市基础 嵌入式物联网技术的应用
- Android微信开放平台SDK, demo调试
- VS快捷键
- GCD 集中与iOS的多核编程和内存管理
- 在VS2008中加入ExtJS智能提示
- 十个最有希望的移动应用开发方向