PHP STRING 陷阱原理說明

來源:互聯網
上載者:User

A string is series of characters.
String access and modification by character
Characters within strings may be accessed and modified by specifying the zero-based offset of the desired character after the string using square array brackets, as in $str[42]. Think of a string as an array of characters for this purpose.
Note: Strings may also be accessed using braces, as in $str{42}, for the same purpose. However, this syntax is deprecated as of PHP 5.3.0. Use square brackets instead, such as $str[42].
Warning
Writing to an out of range offset pads the string with spaces. Non-integer types are converted to integer. Illegal offset type emits E_NOTICE. Negative offset emits E_NOTICE in write but reads empty string. Only the first character of an assigned string is used. Assigning empty string assigns NUL byte.

以上都是 php manual 中的原話。
需要注意的時候,我們訪問數組的時候 都是使用方括弧“[]”,string作為一個也可以使用操作符“[]”進行訪問。但是,需要注意的一點就是,訪問字串時候,操作符“[]”中的內容會被轉化為int類型的。
eg: $str ='123456';
echo $str['php'];//結果是1,因為offset ‘php'轉化為integer為0,既是訪問的是字串的第一個字元.
var_dump(isset($str['php']));//結果是bool(true) 原理同上。
所以,在我們使用isset判斷一個設定是否存在某個鍵時候,應該先判斷試下,傳遞過來的變數是否是數組,然後再判斷是否是存在指定的key
eg://如果需要判斷傳遞過來的數組是否存在'php'這個key時候,比較安全的做法為: 複製代碼 代碼如下:function is_set($arr, $key){
if (is_array($arr) && isset($arr[$key])) {
//存在該值的邏輯
} else{
//$arr不是數組 或者 數組$arr不存在key $key的邏輯
}
}

如果 上面的函數 沒有添加 is_array 的判斷,當傳遞一個 字串過來的時候, 結果就不是我們預想的那樣了。

僅此為記,以免以後也出現類似的問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.