成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php易錯(cuò)筆記-類型

tinyq / 2105人閱讀

摘要:非法下標(biāo)類型會(huì)產(chǎn)生一個(gè)級(jí)別錯(cuò)誤。用負(fù)數(shù)下標(biāo)寫入字符串時(shí)會(huì)產(chǎn)生一個(gè)級(jí)別錯(cuò)誤,用負(fù)數(shù)下標(biāo)讀取字符串時(shí)返回空字符串。浮點(diǎn)數(shù)也會(huì)被轉(zhuǎn)換為整型,意味著其小數(shù)部分會(huì)被舍去。

Boolean

當(dāng)轉(zhuǎn)換為 boolean 時(shí),以下值被認(rèn)為是 FALSE:
布爾值 FALSE 本身
整型值 0(零)
浮點(diǎn)型值 0.0(零)
空字符串"",以及字符串 "0"
不包括任何元素的數(shù)組[]
特殊類型 NULL(包括尚未賦值的變量)
空標(biāo)記生成的 SimpleXML 對(duì)象

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


整數(shù)

注意類型轉(zhuǎn)換:


如果給定的一個(gè)數(shù)超出了 integer 的范圍,將會(huì)被解釋為 float。同樣如果執(zhí)行的運(yùn)算結(jié)果超出了 integer 范圍,也會(huì)返回 float。

Example #2 32 位系統(tǒng)下的整數(shù)溢出


Example #3 64 位系統(tǒng)下的整數(shù)溢出


浮點(diǎn)型

(也叫浮點(diǎn)數(shù) float,雙精度數(shù) double 或?qū)崝?shù) real)可以用以下任一語法定義:


浮點(diǎn)數(shù)的精度有限。 
floor((0.1+0.7)*10) 通常會(huì)返回 7 而不是預(yù)期中的 8,因?yàn)樵摻Y(jié)果內(nèi)部的表示其實(shí)是類似
7.9999999999999991118...。
所以永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等

$a 和 $b 在小數(shù)點(diǎn)后五位精度內(nèi)都是相等的。


字符串 單引號(hào)

只轉(zhuǎn)義


雙引號(hào)

正則用雙引號(hào)

    換行(ASCII 字符集中的 LF 或 0x0A (10))

    回車(ASCII 字符集中的 CR 或 0x0D (13))
	    水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
v    垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
e    Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
f    換頁(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
    反斜線
$    美元標(biāo)記
"    雙引號(hào)"
[0-7]{1,3}    符合該正則表達(dá)式序列的是一個(gè)以八進(jìn)制方式來表達(dá)的字符
x[0-9A-Fa-f]{1,2}    符合該正則表達(dá)式序列的是一個(gè)以十六進(jìn)制方式來表達(dá)的字符

雙引號(hào)示例:

getName(): {${$object->getName()}}";

// 有效,輸出: I"d like an A & W
echo "I"d like an {${beers::softdrink}}
";

// 也有效,輸出: I"d like an Alexander Keith"s
echo "I"d like an {${beers::$ale}}
";
?>
Heredoc 結(jié)構(gòu)

沒有使用雙引號(hào)的雙引號(hào)字符串

Warning
要注意的是結(jié)束標(biāo)識(shí)符這行除了可能有一個(gè)分號(hào)(;)外,絕對(duì)不能包含其它字符。這意味著標(biāo)識(shí)符不能縮進(jìn),分號(hào)的前后也不能有任何空白或制表符。更重要的是結(jié)束標(biāo)識(shí)符的前面必須是個(gè)被本地操作系統(tǒng)認(rèn)可的換行,比如在 UNIX 和 Mac OS X 系統(tǒng)中是 n,而結(jié)束定界符(可能其后有個(gè)分號(hào))之后也必須緊跟一個(gè)換行。

如果不遵守該規(guī)則導(dǎo)致結(jié)束標(biāo)識(shí)不“干凈”,PHP 將認(rèn)為它不是結(jié)束標(biāo)識(shí)符而繼續(xù)尋找。如果在文件結(jié)束前也沒有找到一個(gè)正確的結(jié)束標(biāo)識(shí)符,PHP 將會(huì)在最后一行產(chǎn)生一個(gè)解析錯(cuò)誤。

Heredocs 結(jié)構(gòu)不能用來初始化類的屬性。自 PHP 5.3 起,此限制僅對(duì) heredoc 包含變量時(shí)有效。

foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital "A": x41
EOT;

This does not:
foo(<<
Nowdoc 結(jié)構(gòu)

單引號(hào)字符串


存取和修改
超出字符串長度的下標(biāo)寫入將會(huì)拉長該字符串并以空格填充。非整數(shù)類型下標(biāo)會(huì)被轉(zhuǎn)換成整數(shù)。非法下標(biāo)類型會(huì)產(chǎn)生一個(gè) E_NOTICE 級(jí)別錯(cuò)誤。用負(fù)數(shù)下標(biāo)寫入字符串時(shí)會(huì)產(chǎn)生一個(gè) E_NOTICE
級(jí)別錯(cuò)誤,用負(fù)數(shù)下標(biāo)讀取字符串時(shí)返回空字符串。寫入時(shí)只用到了賦值字符串的第一個(gè)字符。用空字符串賦值則賦給的值是 NULL 字符。

PHP 的字符串在內(nèi)部是字節(jié)組成的數(shù)組。因此用花括號(hào)訪問或修改字符串對(duì)多字節(jié)字符集很不安全。僅應(yīng)對(duì)單字節(jié)編碼例如 ISO-8859-1 的字符串進(jìn)行此類操作。


Note:
自 PHP 5.4 起字符串下標(biāo)必須為整數(shù)或可轉(zhuǎn)換為整數(shù)的字符串,否則會(huì)發(fā)出警告。之前例如 "foo" 的下標(biāo)會(huì)無聲地轉(zhuǎn)換成 0。
PHP 5.5 增加了直接在字符串原型中用 [] 或 {} 訪問字符的支持。
轉(zhuǎn)換

1.一個(gè)值可以通過在其前面加上 (string) 或用 strval() 函數(shù)來轉(zhuǎn)變成字符串
2.一個(gè)布爾值 boolean 的 TRUE 被轉(zhuǎn)換成 string 的 "1"。Boolean 的 FALSE 被轉(zhuǎn)換成 ""(空字符串)
3.數(shù)組 array 總是轉(zhuǎn)換成字符串 "Array"
4.在 PHP 4 中對(duì)象 object 總是被轉(zhuǎn)換成字符串 "Object",PHP 5 起,適當(dāng)時(shí)可以用 __toString 方法。
5.資源 resource 總會(huì)被轉(zhuǎn)變成 "Resource id #1" 這種結(jié)構(gòu)的字符串,其中的 1 是 PHP 在運(yùn)行時(shí)分配給該 resource 的唯一值
6.NULL 總是被轉(zhuǎn)變成空字符串

字符串的開始部分決定了它的值。如果該字符串以合法的數(shù)值開始,則使用該數(shù)值。否則其值為 0(零)。

數(shù)組

PHP 中的數(shù)組實(shí)際上是一個(gè)有序映射。映射是一種把 values 關(guān)聯(lián)到 keys 的類型。此類型在很多方面做了優(yōu)化,因此可以把它當(dāng)成真正的數(shù)組,或列表(向量),散列表(是映射的一種實(shí)現(xiàn)),字典,集合,棧,隊(duì)列以及更多可能性。

PHP 數(shù)組可以同時(shí)含有 integer 和 string 類型的鍵名,因?yàn)?PHP 實(shí)際并不區(qū)分索引數(shù)組和關(guān)聯(lián)數(shù)組。
Key

key 會(huì)有如下的強(qiáng)制轉(zhuǎn)換
1.包含有合法整型值的字符串會(huì)被轉(zhuǎn)換為整型。例如鍵名 "8" 實(shí)際會(huì)被儲(chǔ)存為 8。但是 "08" 則不會(huì)強(qiáng)制轉(zhuǎn)換,因?yàn)槠洳皇且粋€(gè)合法的十進(jìn)制數(shù)值。
2.浮點(diǎn)數(shù)也會(huì)被轉(zhuǎn)換為整型,意味著其小數(shù)部分會(huì)被舍去。例如鍵名 8.7 實(shí)際會(huì)被儲(chǔ)存為 8。
3.布爾值也會(huì)被轉(zhuǎn)換成整型。即鍵名 true 實(shí)際會(huì)被儲(chǔ)存為 1 而鍵名 false 會(huì)被儲(chǔ)存為 0
4.Null 會(huì)被轉(zhuǎn)換為空字符串,即鍵名 null 實(shí)際會(huì)被儲(chǔ)存為 ""。
5.數(shù)組和對(duì)象不能被用為鍵名。堅(jiān)持這么做會(huì)導(dǎo)致警告:Illegal offset type。

Example #2 類型強(qiáng)制與覆蓋示例

 "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);
?>

以上例程會(huì)輸出:

array(1) {
  [1]=>
  string(1) "d"
}

Example #3 混合 integer 和 string 鍵名

 "bar",
    "bar" => "foo",
    100   => -100,
    -100  => 100,
);
var_dump($array);
?>

以上例程會(huì)輸出:

array(4) {
  ["foo"]=>
  string(3) "bar"
  ["bar"]=>
  string(3) "foo"
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}

Example #5 僅對(duì)部分單元指定鍵名

 "c",
         "d",
);
var_dump($array);
?>

以上例程會(huì)輸出:

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}
轉(zhuǎn)換

integer,float,string,boolean 和 resource 類型轉(zhuǎn)換為數(shù)組,將得到一個(gè)僅有一個(gè)元素的數(shù)組,其下標(biāo)為 0,該元素即為此標(biāo)量的值。換句話說,(array)$scalarValue 與 array($scalarValue) 完全一樣。

如果一個(gè) object 類型轉(zhuǎn)換為 array,則結(jié)果為一個(gè)數(shù)組,其單元為該對(duì)象的屬性。鍵名將為成員變量名,不過有幾點(diǎn)例外:整數(shù)屬性不可訪問;私有變量前會(huì)加上類名作前綴;保護(hù)變量前會(huì)加上一個(gè) "*" 做前綴。這些前綴的前后都各有一個(gè) NULL 字符。這會(huì)導(dǎo)致一些不可預(yù)知的行為: