亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP填坑——數據類型

2019-11-08 20:25:21
字體:
來源:轉載
供稿:網友

php填坑——數據類型

測試環境 PHP version 5.3.29/5.6.29/7.1.0 Apache 2.4.25

PHP中的數據類型

PHP 支持 8 種原始數據類型。

四種標量類型:

boolean(布爾型) integer(整型) float(浮點型,也稱作 double) string(字符串)

兩種復合類型:

array(數組) object(對象)

最后是兩種特殊類型:

resource(資源) NULL(無類型)

Boolean

當轉換為 boolean 時,以下值被認為是 FALSE:

布爾值 FALSE 本身 整型值0 (零) 浮點型值 0.0(零) 空字符串,以及字符串 “0” 不包括任何元素的數組 特殊類型 NULL(包括尚未賦值的變量) 從空標記生成的 Simplexml 對象

所有其它值都被認為是 TRUE(包括任何資源)。

Example-1

<?php $a= '0.00'; echo $a ?'true':'false';//true?><?php $array = array('key'=>true); if($array['key'] != 'false') echo 'The value of key is '.$array['key'];?><?php var_dump(0 == 'all');//bool(true)?><?php //TRUE和FALSE不能當成是1和0的常量 $var1 = TRUE; $var2 = FALSE; echo $var1; // outputs: 1 echo $var2; //outputs: nothing echo (int)$var2; //outputs:0 //注意 true 和 false 輸出結果的差異 echo false ; //nothing echo (false) ; //nothing echo false+false ; //0 echo (false+false) ; //0 echo intval(false) ; //0 echo '"'.false.'"' ; //"" echo "<hr/>"; echo true ; //1 echo (true) ; //1 echo true+true ; //2 echo (true+true) ; //2 echo intval(true) ; //1 echo '"'.true.'"' ; //"1"?>

Integer

整型值可以使用十進制,十六進制,八進制或二進制表示,前面可以加上可選的符號(- 或者 +)。

二進制表達的 integer 自 PHP 5.4.0 起可用,PHP 5.4.0 之前的版本則報語法錯誤。

要使用八進制表達,數字前必須加上0(零);要使用十六進制表達,數字前必須加上 0x;要使用二進制表達,數字前必須加上 0b。

Example-1

PHP 7.0.0 之前的版本,如果向八進制數傳遞了一個非法數字(即 8 或 9),則后面其余數字會被忽略; PHP 7.0.0 之后,如果向八進制數傳遞了一個非法數字,則會解析錯誤; <?php var_dump(01090); // 八進制 010 = 十進制 8?>

Example-2

如果給定的一個數超出了 integer 的范圍,將會被解釋為 float。同樣如果執行的運算結果超出了 integer 范圍,也會返回 float; PHP 不支持無符號整數; 自 PHP 5.0.5 后,最大值可以用常量 PHP_INT_MAX 來表示; 自 PHP 7.0.0 后,最小值可以用常量 PHP_INT_MIN 來表示; <?php $max = PHP_INT_MAX ; //PHP 5.0.5版本后支持該常量 $min = PHP_INT_MIN; //PHP 7.0.0 版本之后支持該常量 echo $max,$min; $large_number = 2147483647; var_dump($large_number); // int(2147483647) $large_number = 2147483648; var_dump($large_number); // float(2147483648) $million = 1000000; $large_number = 50000 * $million; var_dump($large_number); // float(50000000000)?>

Example-3

當從浮點數轉換成整數時,將向下取整。如果浮點數超出了整數范圍,則結果為未定義,因為沒有足夠的精度給出一個確切的整數結果。在此情況下沒有警告,甚至沒有任何通知!

自 PHP7.0.0 之后 NAN和Infinity 強制轉換成整型結果總是0

<?php var_dump((int)NAN); // PHP 7.0.0之前為 -2147483648,之后為0 var_dump((int)INF); // PHP 7.0.0之前為 0 ,之后也是0?>

Example-4

決不要將未知的分數強制轉換為 integer,這樣有時會導致不可預料的結果。

<?php echo (int) ((0.1+0.7) * 10); // outputs: 7?>

Example-5

數字前面有0代表八進制,但是字符串型數字前面有0并不是八進制。

<?php $x = 0123; // 83 $y = "0123" + 0; // 123 echo $x,$y;?>

Example-6

對超過int型最大值的數字進行取模運算時,會強制將float類型轉化成int類型,從而出現錯誤。

<?php $i = 6887129852; //超過int型最大值則為float類型 echo "i=$i <br/>/n"; echo "i%36=".($i%36)."<br/>/n"; echo "alternative i%36=".($i-floor($i/36)*36)."/n";?>

Float

某些數學運算會產生一個由常量 NAN 所代表的結果。此結果代表著一個在浮點數運算中未定義或不可表述的值。任何拿此值與其它任何值進行的松散或嚴格比較的結果都是 FALSE。

由于 NAN 代表著任何不同值,不應拿 NAN 去和其它值進行比較,包括其自身,應該用 is_nan() 來檢查。

浮點數之間不能進行比較,要測試浮點數是否相等,要使用一個僅比該數值大一點的最小誤差值。

Example-1

<?php echo intval(19.31*100),'<br/>'; //獲取一個變量的整數 echo number_format(19.31*100,20); //格式化數字 echo "<hr/>"; //不要拿浮點數進行比較 $x = 8 - 6.4; // which is equal to 1.6 $y = 1.6; //echo number_format($y,20); var_dump($x == $y); // is not true?>

String

一個字符串 string 就是由一系列的字符組成,其中每個字符等同于一個字節。這意味著 PHP 只能支持 256 的字符集,因此不支持 Unicode 。

一個字符串可以用 4 種方式表達: - 單引號 - 雙引號 - heredoc 語法結構 - nowdoc 語法結構(自 PHP 5.3.0 起)

string 中的字符可以通過一個從 0 開始的下標,用類似 array 結構中的方括號包含對應的數字來訪問和修改,比如 $str[42],也可用花括號訪問,比如 $str{42}。

PHP 的字符串在內部是字節組成的數組。因此用花括號訪問或修改字符串對多字節字符集很不安全。

Example-1

自 PHP 5.4 起字符串下標必須為整數或可轉換為整數的字符串,否則會發出警告。

PHP 5.5 增加了直接在字符串原型中用[]訪問字符的支持。

<?php $str = 'abc'; var_dump($str['1']); var_dump(isset($str['1'])); echo "<br>"; //以下字符串下標在 PHP 5.4 以上的版本中會發出警告。 var_dump($str['1.0']); var_dump(isset($str['1.0'])); echo "<br>"; var_dump($str['x']); var_dump(isset($str['x'])); echo "<br>"; var_dump($str['1x']); var_dump(isset($str['1x'])); //PHP 5.5 支持在字符串原型中使用[]訪問字符 var_dump('abc'[0]); var_dump('abc'{1});//在PHP 5.6 版本中解析錯誤,在PHP 7.1 上運行成功?>

Example-2

自 PHP 7.1.0 開始, 字符串支持負索引下標。

<?php $array = [-3 => 'foo']; echo "The element at index -3 is $array[-3].";?>

Example-3

雙引號內可以解析單引號內的變量,但是在關聯數組中,雙引號并不能解析單引號內的索引。 解決辦法是使用復雜語法{}或者去掉索引的單引號。

<?php $str = 'abc'; echo "this is a '$str'".'<br/>'; $fruit=array('a'=>'apple','b'=>'banana'); echo "This is a $fruit['a']"; //語法錯誤T_ENCAPSED_AND_WHITESPACE //解決辦法 echo "This is a $fruit[a]"; echo "This is a {$fruit['a']}"; echo "This is a ${fruit['a']}";?>

Array

PHP 中的數組實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型。此類型在很多方面做了優化,因此可以把它當成真正的數組,或列表(向量),散列表(是映射的一種實現),字典,集合,棧,隊列以及更多可能性。由于數組元素的值也可以是另一個數組,樹形結構和多維數組也是允許的。

key 可以是 integer 或者 string。value 可以是任意類型。

如果對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。如果指定的鍵名已經有了值,則該值會被覆蓋。

Example-1

只對某些單元指定鍵名而對其它的空置,新的鍵名將是該值+1,如果當前還沒有整數索引,則鍵名將為 0.

<?php$array = array( "a", "b", 6 => "c", "d",);var_dump($array);?>

Example-2

自 5.4 起可以使用短數組定義語法,用 [] 替代 array()。

<?php$array1 = array( "foo" => "bar", "bar" => "foo",);// 自 PHP 5.4 起,可使用[]代替array()$array2 = [ "foo" => "bar", "bar" => "foo",];?>

Example-3

如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最后一個,之前的都被覆蓋了。

<?php $array = array( 1 => "a", "1" => "b", 1.5 => "c", true => "d", ); var_dump($array);?> <?php$array = array(0, 1, "2.99999999" => 56, 2 => 2, 3.9999 => 3, 3 => 3.1, 1 => 4, 0 => 6, );PRint_r($array);?>

Examlpe-4

自 PHP 5.4 起可以用數組間接引用函數或方法調用的結果。之前只能通過一個臨時變量。

自 PHP 5.5 起可以用數組間接引用一個數組原型。

<?php function getArray() { return array(1, 2, 3); } $secondElement = getArray()[1];// on PHP 5.4 // PHP 5.4 之前只能通過一個臨時變量 $tmp = getArray(); $secondElement = $tmp[1]; // or list(, $secondElement) = getArray();?>

Example-5

unset() 函數允許刪除數組中的某個鍵。但要注意數組并不會重建索引。如果需要刪除后重建索引,可以用 array_values() 函數。

<?php // 創建一個簡單的數組 $array = array(1, 2, 3, 4, 5); print_r($array); // 現在刪除其中的所有元素,但保持數組本身不變: foreach ($array as $i => $value) { unset($array[$i]); } print_r($array); // 添加一個單元(注意新的鍵名是 5) $array[] = 6; print_r($array); // 重新索引: $array = array_values($array); $array[] = 7; print_r($array);?>

Example-6

在雙引號字符串中,不給索引加上引號是有效的,但是最好始終在用字符串表示的數組索引上加上引號。 以下是例子錯的,但可以正常運行。錯誤是因為代碼中有一個未定義的常量(bar)而不是字符串(’bar’-注意引號),而 PHP 可能會在以后定義此常量,不幸的是你的代碼中有同樣的名字。它能運行,是因為 PHP 自動將裸字符串轉換成一個其值為該裸字符串的正常字符串。

<?php $foo[bar] = 'enemy'; echo $foo[bar];?>

Example-7

對于任意 integer,float,string,boolean 和 resource 類型,如果將一個值轉換為數組,將得到一個僅有一個元素的數組,其下標為 0,該元素即為此標量的值。

如果一個 object 類型轉換為 array,則結果為一個數組,其單元為該對象的屬性。鍵名將為成員變量名,不過有幾點例外:整數屬性不可訪問;私有變量前會加上類名作前綴;保護變量前會加上一個 ‘*’ 做前綴。這些前綴的前后都各有一個 NULL 字符(/0)。

<?php class A { private $A; // 轉換成數組后索引為/0A/0A } class B extends A { private $A; // 轉換成數組后索引為/0B/0A public $AA; // 轉換成數組后索引為AA } var_dump((array) new B());?>

Object

如果將一個對象轉換成對象,它將不會有任何變化。如果其它任何類型的值被轉換成對象,將會創建一個內置類stdClass的實例。如果該值為 NULL,則新的實例為空。數組轉換成對象將使鍵名成為屬性名并具有相對應的值。對于任何其它的值,名為 scalar 的成員變量將包含該值。

Example-1

<?php $obj1 = (object) array('1' => 'foo', 2=>'bar'); var_dump($obj1); // outputs : object(stdClass)#1 (2) { [1]=> string(3) "foo" [2]=> string(3) "bar" } var_dump(isset($obj1->{'1'})); // outputs : 'bool(false)' var_dump(key($obj1)); // outputs : 'int(1)' $obj2 = (object) 'ciao'; var_dump($obj2); echo $obj2->scalar; // outputs : 'ciao'?>

Example-2

自 5.4 起可以使用短數組定義語法,創建一個stdClass對象。

<?php $object =(object) [ 'propertyOne' => 'foo', 'propertyTwo' => 42, ]; var_dump($object);?>

Example-3

自 PHP 7.0.0 之后,多了以下幾種創建空對象的方法。(在PHP 7.1.0上成功運行)

<?php $obj1 = new /stdClass; // stdClass 對象實例 $obj2 = new class{}; // class@anonymous 對象實例 $obj3 = (object)[]; // 空數組強轉對象 echo "<pre>"; var_dump($obj1); // object(stdClass)#1 (0) {} var_dump($obj2); // object(class@anonymous)#2 (0) {} var_dump($obj3); // object(stdClass)#3 (0) {}?>

Resource

資源 resource 是一種特殊變量,保存了到外部資源的一個引用。資源是通過專門的函數來建立和使用的。

由于資源類型變量保存有為打開文件、數據庫連接、圖形畫布區域等的特殊句柄,因此將其它類型的值轉換為資源沒有意義。

由于 Zend 引擎引進了引用計數系統,可以自動檢測到一個資源不再被引用了(和 java 一樣)。這種情況下此資源使用的所有外部資源都會被垃圾回收系統釋放。因此,很少需要手工釋放內存。 請注意:持久數據庫連接比較特殊,它們不會被垃圾回收系統銷毀。

NULL

NULL 值表示一個變量沒有值。NULL 類型唯一可能的值就是 NULL。

使用 (unset) $var 將一個變量轉換為 null 將不會刪除該變量或 unset 其值。僅是返回 NULL 值而已。

Example-1

<?php $test['_string'] = ""; $test['_int'] = 0; $test['_float'] = 0.0; $test['_null'] = null; $test['_arr'] = array(); $test['_obj'] = new /stdClass; //is not null foreach($test as $key => $value) { echo $key.": "; if($value == null) echo "is null/n"; else echo "is not null/n"; } die();?>

Example-2

有趣的是貌似只有當變量$a="0"的時候以下條件才能成立。

<?php $a = '0'; echo ($a != NULL) && ((bool)$a == NULL) ?'not null':'null';?>

Example-3

注意unset(a)函數銷毀變量和a = NULL的區別

<?php // unset($a) $a = 5; $b = & $a; unset($a); print "b $b "; // b 5 // $a = NULL; $a = 5; $b = & $a; $a = NULL; print "b $b "; // b print(! isset($b)); // 1 ?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产美女久久久久| 国产精国产精品| 成人黄色av播放免费| 亚洲成av人乱码色午夜| 中文字幕精品影院| 久久久久久久久久久免费精品| 亚洲国产高清高潮精品美女| 在线成人一区二区| 69影院欧美专区视频| 久久久999精品视频| 一区二区日韩精品| 久久久久久香蕉网| 亚洲资源在线看| 亚洲人成网站777色婷婷| 91久久久久久| 精品动漫一区二区三区| 国产欧美日韩91| 成人性教育视频在线观看| 色偷偷噜噜噜亚洲男人的天堂| 在线国产精品视频| 日韩精品在线观看视频| 国产成人一区二| 精品久久久久久久久久| 欧美成人一区在线| 久久久亚洲国产| 久久精品视频导航| 欧美性猛交xxxxx免费看| 欧美视频专区一二在线观看| 日韩av影视综合网| 亚洲精品久久7777777| 午夜精品久久久久久久99热| 91久久夜色精品国产网站| 欧美精品在线免费| 91夜夜未满十八勿入爽爽影院| 国产成人综合精品在线| 在线视频欧美性高潮| 成人a在线观看| 久久人人爽人人爽人人片亚洲| 中文字幕久热精品视频在线| 中文字幕欧美精品日韩中文字幕| 欧美午夜视频一区二区| 91精品国产综合久久香蕉| 亚洲精品美女视频| 国产91露脸中文字幕在线| 日韩亚洲欧美中文在线| 国产精品免费看久久久香蕉| 国产成人精品国内自产拍免费看| 亚洲专区在线视频| 亚洲直播在线一区| 俺去了亚洲欧美日韩| 国产精品丝袜一区二区三区| 欧美激情免费在线| 国产日韩欧美成人| 亚洲最大激情中文字幕| 亚洲伊人久久大香线蕉av| 国产精品第一区| 欧美日韩激情视频8区| 日韩欧美一区二区在线| 啪一啪鲁一鲁2019在线视频| 日本久久久a级免费| 欧美大胆a视频| 国产99久久久欧美黑人| 国产99视频精品免视看7| 国产成人精品免费久久久久| 国产精品热视频| 亚洲免费成人av电影| 欧美激情a在线| 亚洲精品一区二区在线| 亚洲欧美日韩另类| 国产福利视频一区二区| 亚洲自拍在线观看| 欧美国产精品人人做人人爱| 久久久国产影院| 亚洲一区二区中文| 亚洲国产高潮在线观看| 狠狠躁夜夜躁人人爽天天天天97| 精品国产一区二区三区久久| 91网在线免费观看| 午夜免费久久久久| 91免费看视频.| 国产精品久久久久久av下载红粉| 97婷婷涩涩精品一区| 亚洲一区第一页| 亚洲国产精品资源| 亚洲国产精品美女| 欧美中文字幕在线播放| 久久九九国产精品怡红院| 美女久久久久久久久久久| 欧美国产日韩免费| 成人激情电影一区二区| 日韩的一区二区| 久久久免费观看| 欧美日韩爱爱视频| 久久久精品久久久久| 国产精品一区二区三区在线播放| 欧美性色xo影院| 欧美国产日韩精品| 欧美特黄级在线| 久久综合久久88| 日韩在线精品视频| 亚洲欧洲日产国码av系列天堂| 97国产精品视频人人做人人爱| 亚洲午夜av电影| 成人性生交大片免费看视频直播| 欧美一区二区三区免费观看| 国产v综合v亚洲欧美久久| 一夜七次郎国产精品亚洲| 国产精品91视频| 懂色av一区二区三区| 亚洲欧美日韩国产中文专区| 高清一区二区三区日本久| 欧美精品福利视频| 国产精品一区久久久| 国产97在线播放| 日本久久久a级免费| 日韩国产欧美精品一区二区三区| 中文字幕在线视频日韩| 久久久免费电影| 欧美日韩免费观看中文| 欧洲s码亚洲m码精品一区| 久久久久久久久久久亚洲| 在线日韩中文字幕| 亚洲视频777| 欧美在线不卡区| 精品国产网站地址| 91精品久久久久久久久久入口| 亚洲第一福利网| 欧美日韩国产色| 日韩电影免费在线观看| 日韩在线一区二区三区免费视频| 国产精品免费一区豆花| 2019国产精品自在线拍国产不卡| 一区二区三区四区视频| 国产69精品99久久久久久宅男| 2025国产精品视频| 午夜免费久久久久| 欧美电影免费观看电视剧大全| 国内外成人免费激情在线视频网站| 亚洲香蕉成人av网站在线观看| 亚洲第一区中文99精品| 国产在线观看精品| 欧美另类xxx| 日韩视频免费看| 亚洲人成人99网站| 亚洲第一页自拍| 久久精品2019中文字幕| 国产一区二区成人| 黄色精品在线看| 日韩精品中文字幕久久臀| 亚洲最大av在线| 国产一区在线播放| 欧美日韩另类在线| 色综合伊人色综合网站| 欧美大片在线影院| 日韩在线高清视频| 国产亚洲精品成人av久久ww| 国产精品久久久久秋霞鲁丝| 亚洲成人av片| 最近2019好看的中文字幕免费| 久久久噜噜噜久久久| 亚洲精品aⅴ中文字幕乱码| 国产精品一区二区3区| 日本老师69xxx| 欧洲s码亚洲m码精品一区|