程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 一道小題引出的php數據類型轉換問題

一道小題引出的php數據類型轉換問題

編輯:關於PHP編程

題目如下:   [php]   <?php      $a = 3;   $b = 5;   $c = $a > $b ? 2:4;      echo $d = $a<$c;   /*analysis why the result is 1*/   echo $d;   echo gettype($d);   echo var_dump($d);      /*example 2*/   if('ABC'==0)     echo 'yes';   else     echo 'no';      /*example 3 the result $h=10,$g=10;*/      $h=+$g=10;   echo $h,"$g";      /*這裡關乎運算符優先級*/       ?>     對結果感到疑惑吧!? php作為一種弱類型語言,是允許不同類型的數據進行混合運算的(類似 VbScript),PHP 解釋引擎自動做了類型轉換的工作。必須引起注意。 先來回憶一下手冊裡的PHP echo() 函數 定義和用法 echo() 函數輸出一個或多個字符串。   語法 echo(strings) 參數 描述 strings 必需。一個或多個要發送到輸出的字符串。   注釋:注釋:echo() 實際上不是一個函數,因此您無需對其使用括號。不過,如果您希望向 echo() 傳遞一個或多個參數,那麼使用括號會發生解析錯誤。echo()函數可以用成 echo('...'),也可以用成 echo '...'。echo 的操作數類型應該是字符串型的。 詳細用法參見http://www.w3school.com.cn/php/func_string_echo.asp   為了更好的理解php數據類型轉換,搞清楚計算結果的復雜詭異,請記住以下幾點: 1:注意 echo 和 print 函數的區別,比如:   1)、     echo "123" . print("abc");  //語法正確,但輸出不是123abc,而是 abc1231                                 //原因是首先執行 print()函數輸出 abc,再連接"123"和函數的返回值1     print "abc" . echo('ooo');  //echo('ooo')會導致 Parse error: syntax error   2)、echo() 函數可以使用簡化語法。 <?= '...' ?>   例如:   [php]   <html>   <body>      <?php   $color = "red";   ?>      <p>Roses are <?=$color?></p>      </body>   </html>       3)、echo()函數 比 print() 函數快一點點。 接下來,需要熟悉一下點運算符的操作,這裡以網友“張慶(網眼)”的例子示意:   示例1:     最一般的情況,輸出字符串,比如 echo 'abc' . "123",結果是 abc123,沒說明好解釋的。           示例2:     echo true;     輸出結果是 1。true 是 PHP 內置布爾常量,輸出前被轉換為字符串"1"。       echo false;     輸出結果是空。false 也是 PHP 內置布爾常量,輸出前被轉換為空字符串。           示例3:     echo 0=="ABC";     輸出結果是 1。0=="ABC"中,字符串"ABC"首先被轉換為數值型(字符串轉換為數值,還有一個規則,有機會再講),為0,再和 0 比較,結果為 true,再執行 echo true,為 1。默默地進行了 2 次類型轉換。       再注意,echo 'ABC'==0; 結果還是 1。注意不是把 0 轉換為字符串 "0" 再和字符串 'ABC' 比較從而得到 false。呵呵,很詭異嗎?       類似地有另一個題目:       if('ABC'==0)       echo 'yes';     else       echo 'no';       知道到底輸出 yes 還是 no 了嗎?           示例4:再來個更詭異的。     echo 100 . "ABC"; // 注意!點符號兩邊都有空格     這句輸出 100ABC,因為 100 被轉化為"100"了。       echo 100."ABC"; // 注意!點符號兩邊沒有空格,是連寫     但這句報告語法錯誤!為什麼呀?因為 PHP 在這裡把點符號當小數點對待了,“100."ABC"” 當然不是個正確的數字了。       echo 100. "ABC";     只有點符號右邊有空格,語法錯誤。原因如上。     echo 100 ."ABC";     只有點符號左邊有空格,語法正確,輸出 100ABC。         類似的:       $a = 100;     echo $a . 200; //點符號兩邊有空格     輸出 100200。       $a = 100;     echo $a.200; //點符號兩邊沒有空格     語法錯誤。“$a.200”也不是一個合格的變量吧。           示例5:     echo 100 + "ABC";     輸出結果是 100。注意不要認為這會產生語法錯誤,因為這裡的“+”號是算數運算符,不是連接運算符的誤寫。"ABC"被轉換為數字 0 了,加 100 後等於100,再轉換為字符串"100"輸出來。進行了2次類型轉換。       echo 100 + "20" . 30; //點符號兩邊有空格     結果輸出 12030。       echo 100 + "20" .30; //點符號左邊有空格,右邊無空格     語法錯誤。.30 被當作 double 類型的 0.30 了。與 100 + "20" 的結果"120"直接擺在一起,PHP 分辨不清,報錯了。       還可以舉出一些例子來。仔細體會,還是能找出類型轉換規律的,PHP 其實並不詭異。

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