多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Php入門教程之PHP 數據類型用法詳解

Php入門教程之PHP 數據類型用法詳解

來源:程序員人生   發布時間:2013-10-04 14:05:33 閱讀次數:3284次

數據類型在php并不像java中那詳細那么多種類型,下面我來給各位同學介紹php 數據類型的一些基礎知道,各位同學可參考.

PHP 數據類型

PHP 支持八種原始類型(type).

四種標量類型:

1.string(字符串)

2.integer(整型)

3.float(浮點型,也作 double )

4.boolean(布爾型)

兩種復合類型:

1.array(數組)

2.object(對象)

兩種特殊類型:

1.resource(資源)

2.NULL(空)

查看變量類型

通過 gettype() 函數可以方便的查看某個變量的類型:

  1. <?php 
  2. $bool = TRUE;     // 布爾型 
  3. $str  = "foo";     // 字符串 
  4. $int  = 12;        // 整型 
  5. echo gettype($bool);        // 輸出 boolean 
  6. echo gettype($str);     // 輸出 string 
  7. echo gettype($int);     // 輸出 integer 
  8. ?> 

判斷變量類型

如果想通過判斷變量類型來可以使用 is_type 函數:

  1. <?php 
  2. $var_int  = 12; 
  3. // 如果 $var_int 是 int 類型,這進行加法 
  4. if (is_int($var_int)) { 
  5.     $var_int = $var_int+4; 
  6. echo $var_int;  // 輸出 16 
  7. ?> 

以上基本就是PHP數據類型的基本內容,大家如果想了解具體每個數據類型的用法,可以查閱PHP手冊,里面有詳細的說明.

數據類型轉換

PHP數據類型有三種轉換方式:

•在要轉換的變量之前加上用括號括起來的目標類型

•使用3個具體類型的轉換函數,intval()、floatval()、strval()

•使用通用類型轉換函數settype(mixed var,string type)

第一種轉換方式: (int)  (bool)  (float)  (string)  (array) (object)

  1. •<?php    
  2. $num1=3.14;     
  3. $num2=(int)$num1;     
  4. •var_dump($num1); //輸出float(3.14)     
  5. •var_dump($num2); //輸出int(3)     
  6. •?>  

第二種轉換方式:  intval()  floatval()  strval()

  1. •<?php  
  2.  $str="123.9abc";     
  3. $int=intval($str);     //轉換后數值:123     
  4. $float=floatval($str); //轉換后數值:123.9     
  5. $str=strval($float);   //轉換后字符串:"123.9"      
  6. •?>  

第三種轉換方式: settype();

  1. •<?php    
  2. $num4=12.8;     
  3. $flg=settype($num4,"int");     
  4. •var_dump($flg);  //輸出bool(true)     
  5. •var_dump($num4); //輸出int(12)     
  6. •?> 

PHP數據類型隱性轉換的陷阱,我這里說的是php5+上跑的,php4的請飄過.先把錯誤報告打開,以防看不到錯誤信息

  1. <?php 
  2. error_reporting(E_ALL); 
  3. ini_set('display_errors', true); 
  4. ?> 

根據php manual 中 http://www.php.net/manual/zh/language.operators.comparison.php 

“Comparison Operators” 一章的說明可知,number 和string進行比較的時候,會先將string類型首先轉化為number,然后再進行比較操作.

1.類型自動轉換為數組

當我們把一個非數組的變量當做數組來調用的時候,該變量在調用時數據類型臨時自動轉換成數組.

實例代碼如下:

  1. <?php 
  2. $str = 'string'
  3. var_dump($str['aaa']);  // string(1) "s" 
  4. var_dump($str);  // string(6) "string" 
  5. if($str['aaa'] === $str[0]) { 
  6.     print "==="
  7. ?> 

如下例子可以明顯的看出下標類型自動轉換在發生.

  1. <?php   
  2. $link = '<a href="http://yulans.cn">yulans</a>';   
  3. $key = '1-10';   
  4. echo "$link[$key]n";  // 同 $link[1] 
  5. echo "{$link[$key]}n";  // 同 $link[1] 
  6. //echo "$link['$key']n";  // 報錯 
  7. echo "{$link['$key']}n";  // 同 $link[0] 
  8. ?>  

這里字符串在 var_dump($str['aaa']) 被臨時轉換成了數組 array('s','t','r','i', 'n','g'),而用關聯數組方式

$str['aaa']讀取索引數組的值,關聯數組的下標'aaa'將被轉換成整形下標,因而在這里的$str['aaa']全等于$str[0].其他數據類型隱性轉換成數組也隱藏有陷阱,一般都不是報出undefined index錯誤.

舉例如下代碼:

  1. <?php 
  2. /** 
  3.  * 測試變量隱性轉換成數組 
  4.  * 
  5.  * @param mixed $param 
  6.  */ 
  7. function test2Arr($param) { 
  8.     var_dump($param['abc']); 
  9. test2Arr(false); // NULL 
  10. test2Arr(123); // NULL 
  11. test2Arr(123.456); // NULL 
  12. test2Arr('string'); // string(1) "s" 
  13. test2Arr(array('abc'=>'text'));  // string(4) text 
  14. test2Arr(new ArrayObject()); // Notice: undefined index: abc 
  15. ?> 

解決辦法:

函數參數數據類型是數組的時候,防止用戶輸入字符串導致錯誤,如下例子,當添加用戶的時候,我們要求用戶必須輸入用戶名.沒有哪個SB把要求是數組的參數傳入字符串,但是防人之心不可無,說不定我連續工作超過十幾個小時后一不小心就成那個SB了,又或許某人想繞過代碼執行操作.

  1. <?php 
  2. /** 
  3.  * 添加用戶(錯誤的寫法) 
  4.  *  
  5.  * @param array $user 
  6.  */ 
  7. function addUser($user) { 
  8.     if(emptyempty($user['name'])) {  // 這里當輸入類型是不為空的字符串的時候會出錯, 
  9.         echo "用戶名必填n"
  10.         return false; 
  11.     } 
  12.     // do sth. 
  13.     echo "測試n"
  14.     return true; 
  15. /** 
  16.  * 添加用戶(正確的寫法) 
  17.  *  
  18.  * @param array $user 
  19.  */ 
  20. function addUser2($user) { 
  21.     if(!is_array($user) || emptyempty($user['name'])) { 
  22.         echo "用戶名必填n"
  23.         return false; 
  24.     } 
  25.     // do sth. 
  26.     echo "測試n"
  27.     return true; 
  28. $user = 'xiaoxiao'
  29. addUser($user); 
  30. addUser2($user); 
  31.  
  32. ?> 

2.純數字字符串比較時自動轉換成整形超過范圍時發生溢出

  1. <?php 
  2. $x1 = '111111111111111111'
  3. $x2 = '111111111111111112'
  4. echo ($x1 === $x2) ? "true" : "false";  // false 如我們所愿,這兩個字符串確實不一樣. 
  5. echo ($x1 == $x2) ? "true" : "false";    // true 這里被偷偷的轉換類型了, 
  6.                                                            // 成了 echo (intval($x1) == intval($x2)) ? "true" : "false"; 整形溢出 
  7. ?> 

3、整形和字符串比較時數據類型隱性轉換有可能發生問題

  1. <?php 
  2. $number = 0; 
  3. $string = 'text'
  4. if($number == $string) { 
  5.     print "true"
  6. else { 
  7.     print "false"
  8. ?> 

很遺憾這里輸出的是 true,我們知道 $number === $string 肯定是false,手冊上說 === 是比較值&&數據類型,而用 == 只是比較值,$number == $string 這里不是比較值嗎? '0' 和 'text' 明顯不一樣啊.小心了,這里的$string是先被秘密轉成和$number一樣的整形再比較的,$number == (int)$string的確是true

4. in_array 小陷阱

因為in_array會將0 和's' 進行比較,0是number類型,'s'是string類型, 's'轉化為number的結果為0,而0 == 0 的結果是true,所以in_array(0, array('s', 'ss'))的結果也是true.如果把in_array 的第三個參數strict設置為 true,比較的時候 就會判斷值和類型是否都相當.如果都相當的話,才會返回true,否則返回false.

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美黄色a级 | 一级黄色欧美 | japanese年轻护士出水 | free性欧美人另类 | 久久91综合国产91久久精品 | 成 人 a v黄 色 | 欧美精品99久久久久久人 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | a免费国产一级特黄aa大 | 动漫日本在线免费观看 | 免费h视频| 欧美日本高清一本二本三本 | 亚洲图片 自拍 | 女人大毛片一级毛片一 | 精品国产一区二区三区四 | 亚洲 欧美 国产 制服 动漫 | 免费一级做a爰片久久毛片潮 | 一级欧美 | 国产亚洲人成网站在线观看 | 黄色天堂网 | 久草在线视频福利资源站 | 欧美一级高清片欧美国产欧美 | 午夜啪啪网| 欧美乱大交xxxx | 一区二区免费 | 五月视频| 在线免费观看福利 | 午夜影院色 | 国产福利一区二区在线观看 | 亚洲精品www久久久久久 | 亚洲2020| 日本一级毛片片在线播放 | 国内精品一区视频在线播放 | 国产福利不卡 | 亚洲女人的天堂 | 国产日产亚洲欧美综合另类 | 中文字幕免费人成乱码中国 | 久久久久综合网久久 | 俺也来俺也去俺也射 | 日本精品久久久久护士 | 欧美亚洲国产日韩 |