程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP流程控制語句以及條件判斷中的數據類型轉換

PHP流程控制語句以及條件判斷中的數據類型轉換

編輯:PHP綜合

php流程控制語句以及條件判斷中的數據類型轉換

php的流程控制語句包括循環體語句和分支判斷語句。

循環操作包括三組語句,分別是while、do-while、for循環。

分支判斷體包括兩組:if else語句、switch語句。

以下以幾個題目來理解php流程控制語句以及條件判斷中的數據類型轉換。

***********************************************

題目一、if-else語句與條件判斷涉及的數據類型轉換

***********************************************

<?php
/*習題*/
/*1。寫出下列代碼的運行結果*/
	if(5<4)
		echo "true";
	else
		echo "false-1"."<br />";
	if("0")
		echo "true";
	else
		echo "false-2"."<br />";
	if($i)
		echo "true";
	else
		echo "false-3"."<br />";
	if("false")
		echo "true";
	else
		echo "false-4"."<br />";
	if(false)
		echo "true";
	else
		echo "false-5"."<br />";

	if(0.0)
		echo "true";
	else
		echo "false-6"."<br />";
	if(php)
		echo "true";
	else
		echo "false-7"."<br />";
	if("")
		echo "true";
	else
		echo "false-8"."<br />";
	if(null)
		echo "true";
	else
		echo "false-9"."<br />";
	if(array(12))
		echo "true";
	else
		echo "false-10"."<br />";
	if(array())
		echo "true";
	else
		echo "false-11"."<br />";
		
/*
	輸出結果:
	false-1
	false-2
	false-3
	true false-5
	false-6
	true false-8
	false-9
	true 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流程控制語句以及條件判斷中的數據類型轉換。這些知識的掌握有利於養成良好的代碼編寫習慣,規避一些現實中的陷阱,提高開發效率。

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved