PHP里 switch case条件语句的问题
佩服楼主 很细心哪!
这个问题应该从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流程练习题
header("Content-type: text/html; charset=utf-8"); if($_POST){ $num = $_POST['num']; switch($num){ case 1: echo "本月有31天"; break; case 2: echo "本月有28/29天"; break; case 3: echo "本月有31天"; break; case 4: echo "本月有30天"; break; case 5: echo "本月有31天"; break; case 6: echo "本月有30天"; break; case 7: echo "本月有31天"; break; case 8: echo "本月有31天"; break; case 9: echo "本月有30天"; break; case 10: echo "本月有31天"; break; case 11: echo "本月有30天"; break; case 12: echo "本月有31天"; break; }}else{ echo(' 输入数字: ');}
编写一个Java程序,接受用户输入的一个1~12之间的整数,利用Switch语句输出对应月份的天数.
import java.util.Scanner;
public class xxx {
/**
* @param args
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
if (i12) {
System.out.println("请重新输入月份");
i = scan.nextInt();
}
switch(i)
{
case 1: System.out.println("本月有31天");break;
case 2: System.out.println("本月有29天");break;
case 3: System.out.println("本月有31天");break;
case 4: System.out.println("本月有30天");break;
case 5: System.out.println("本月有31天");break;
case 6: System.out.println("本月有30天");break;
case 7: System.out.println("本月有31天");break;
case 8: System.out.println("本月有31天");break;
case 9: System.out.println("本月有30天");break;
case 10: System.out.println("本月有31天");break;
case 11: System.out.println("本月有30天");break;
case 12: System.out.println("本月有31天");break;
}
}
}