国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php易錯筆記-類型

tinyq / 2096人閱讀

摘要:非法下標類型會產生一個級別錯誤。用負數下標寫入字符串時會產生一個級別錯誤,用負數下標讀取字符串時返回空字符串。浮點數也會被轉換為整型,意味著其小數部分會被舍去。

Boolean

當轉換為 boolean 時,以下值被認為是 FALSE:
布爾值 FALSE 本身
整型值 0(零)
浮點型值 0.0(零)
空字符串"",以及字符串 "0"
不包括任何元素的數組[]
特殊類型 NULL(包括尚未賦值的變量)
空標記生成的 SimpleXML 對象

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


整數

注意類型轉換:


如果給定的一個數超出了 integer 的范圍,將會被解釋為 float。同樣如果執行的運算結果超出了 integer 范圍,也會返回 float。

Example #2 32 位系統下的整數溢出


Example #3 64 位系統下的整數溢出


浮點型

(也叫浮點數 float,雙精度數 double 或實數 real)可以用以下任一語法定義:


浮點數的精度有限。 
floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似
7.9999999999999991118...。
所以永遠不要相信浮點數結果精確到了最后一位,也永遠不要比較兩個浮點數是否相等

$a 和 $b 在小數點后五位精度內都是相等的。


字符串 單引號

只轉義


雙引號

正則用雙引號

    換行(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 起)
    反斜線
$    美元標記
"    雙引號"
[0-7]{1,3}    符合該正則表達式序列的是一個以八進制方式來表達的字符
x[0-9A-Fa-f]{1,2}    符合該正則表達式序列的是一個以十六進制方式來表達的字符

雙引號示例:

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 結構

沒有使用雙引號的雙引號字符串

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

如果不遵守該規則導致結束標識不“干凈”,PHP 將認為它不是結束標識符而繼續尋找。如果在文件結束前也沒有找到一個正確的結束標識符,PHP 將會在最后一行產生一個解析錯誤。

Heredocs 結構不能用來初始化類的屬性。自 PHP 5.3 起,此限制僅對 heredoc 包含變量時有效。

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

This does not:
foo(<<
Nowdoc 結構

單引號字符串


存取和修改
超出字符串長度的下標寫入將會拉長該字符串并以空格填充。非整數類型下標會被轉換成整數。非法下標類型會產生一個 E_NOTICE 級別錯誤。用負數下標寫入字符串時會產生一個 E_NOTICE
級別錯誤,用負數下標讀取字符串時返回空字符串。寫入時只用到了賦值字符串的第一個字符。用空字符串賦值則賦給的值是 NULL 字符。

PHP 的字符串在內部是字節組成的數組。因此用花括號訪問或修改字符串對多字節字符集很不安全。僅應對單字節編碼例如 ISO-8859-1 的字符串進行此類操作。


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

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

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

數組

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

PHP 數組可以同時含有 integer 和 string 類型的鍵名,因為 PHP 實際并不區分索引數組和關聯數組。
Key

key 會有如下的強制轉換
1.包含有合法整型值的字符串會被轉換為整型。例如鍵名 "8" 實際會被儲存為 8。但是 "08" 則不會強制轉換,因為其不是一個合法的十進制數值。
2.浮點數也會被轉換為整型,意味著其小數部分會被舍去。例如鍵名 8.7 實際會被儲存為 8
3.布爾值也會被轉換成整型。即鍵名 true 實際會被儲存為 1 而鍵名 false 會被儲存為 0
4.Null 會被轉換為空字符串,即鍵名 null 實際會被儲存為 ""
5.數組和對象不能被用為鍵名。堅持這么做會導致警告:Illegal offset type。

Example #2 類型強制與覆蓋示例

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

以上例程會輸出:

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

Example #3 混合 integer 和 string 鍵名

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

以上例程會輸出:

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

Example #5 僅對部分單元指定鍵名

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

以上例程會輸出:

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

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

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