PHP STRING 陷阱原理說明
更新時(shí)間:2010年07月24日 01:14:22 作者:
需要注意的時(shí)候,我們訪問數(shù)組的時(shí)候 都是使用方括號(hào)“[]”,string作為一個(gè)也可以使用操作符“[]”進(jìn)行訪問。但是,需要注意的一點(diǎn)就是,訪問字符串時(shí)候,操作符“[]”中的內(nèi)容會(huì)被轉(zhuǎn)化為int類型的。
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 中的原話。
需要注意的時(shí)候,我們訪問數(shù)組的時(shí)候 都是使用方括號(hào)“[]”,string作為一個(gè)也可以使用操作符“[]”進(jìn)行訪問。但是,需要注意的一點(diǎn)就是,訪問字符串時(shí)候,操作符“[]”中的內(nèi)容會(huì)被轉(zhuǎn)化為int類型的。
eg: $str ='123456';
echo $str['php'];//結(jié)果是1,因?yàn)閛ffset ‘php'轉(zhuǎn)化為integer為0,既是訪問的是字符串的第一個(gè)字符.
var_dump(isset($str['php']));//結(jié)果是bool(true) 原理同上。
所以,在我們使用isset判斷一個(gè)設(shè)置是否存在某個(gè)鍵時(shí)候,應(yīng)該先判斷試下,傳遞過來的變量是否是數(shù)組,然后再判斷是否是存在指定的key
eg://如果需要判斷傳遞過來的數(shù)組是否存在'php'這個(gè)key時(shí)候,比較安全的做法為:
function is_set($arr, $key){
if (is_array($arr) && isset($arr[$key])) {
//存在該值的邏輯
} else{
//$arr不是數(shù)組 或者 數(shù)組$arr不存在key $key的邏輯
}
}
如果 上面的函數(shù) 沒有添加 is_array 的判斷,當(dāng)傳遞一個(gè) 字符串過來的時(shí)候, 結(jié)果就不是我們預(yù)想的那樣了。
僅此為記,以免以后也出現(xiàn)類似的問題。
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 中的原話。
需要注意的時(shí)候,我們訪問數(shù)組的時(shí)候 都是使用方括號(hào)“[]”,string作為一個(gè)也可以使用操作符“[]”進(jìn)行訪問。但是,需要注意的一點(diǎn)就是,訪問字符串時(shí)候,操作符“[]”中的內(nèi)容會(huì)被轉(zhuǎn)化為int類型的。
eg: $str ='123456';
echo $str['php'];//結(jié)果是1,因?yàn)閛ffset ‘php'轉(zhuǎn)化為integer為0,既是訪問的是字符串的第一個(gè)字符.
var_dump(isset($str['php']));//結(jié)果是bool(true) 原理同上。
所以,在我們使用isset判斷一個(gè)設(shè)置是否存在某個(gè)鍵時(shí)候,應(yīng)該先判斷試下,傳遞過來的變量是否是數(shù)組,然后再判斷是否是存在指定的key
eg://如果需要判斷傳遞過來的數(shù)組是否存在'php'這個(gè)key時(shí)候,比較安全的做法為:
復(fù)制代碼 代碼如下:
function is_set($arr, $key){
if (is_array($arr) && isset($arr[$key])) {
//存在該值的邏輯
} else{
//$arr不是數(shù)組 或者 數(shù)組$arr不存在key $key的邏輯
}
}
如果 上面的函數(shù) 沒有添加 is_array 的判斷,當(dāng)傳遞一個(gè) 字符串過來的時(shí)候, 結(jié)果就不是我們預(yù)想的那樣了。
僅此為記,以免以后也出現(xiàn)類似的問題。
您可能感興趣的文章:
- 淺析php中常量,變量的作用域和生存周期
- 關(guān)于PHP5 Session生命周期介紹
- 深入理解PHP之OpCode原理詳解
- PHP的運(yùn)行機(jī)制與原理(底層)
- PHP內(nèi)核探索:哈希表碰撞攻擊原理
- PHP中的插件機(jī)制原理和實(shí)例
- 深入理解PHP原理之錯(cuò)誤抑制與內(nèi)嵌HTML分析
- 深入理解PHP原理之Session Gc的一個(gè)小概率Notice
- 理解php原理的opcodes(操作碼)
- 深入理解PHP原理之異常機(jī)制
- PHP原理之異常機(jī)制深入分析
- 修改Zend引擎實(shí)現(xiàn)PHP源碼加密的原理及實(shí)踐
- 深入理解PHP原理之執(zhí)行周期分析
相關(guān)文章
ECSHOP完美解決Deprecated: preg_replace()報(bào)錯(cuò)的問題
下面小編就為大家?guī)硪黄狤CSHOP完美解決Deprecated: preg_replace()報(bào)錯(cuò)的問題。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05
一個(gè)基于PDO的數(shù)據(jù)庫操作類(新) 一個(gè)PDO事務(wù)實(shí)例
原先已經(jīng)寫過一個(gè)PDO的數(shù)據(jù)庫操作類,這次只是在原先基礎(chǔ)上進(jìn)行修改。2011-07-07
什么是OneThink oneThink后臺(tái)添加插件步驟
這篇文章主要為大家詳細(xì)介紹了oneThink后臺(tái)添加插件的具體實(shí)現(xiàn)步驟,內(nèi)容簡單,步驟完整,感興趣的小伙伴們可以參考一下2016-04-04
PHP實(shí)現(xiàn)將MySQL重復(fù)ID二維數(shù)組重組為三維數(shù)組的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將MySQL重復(fù)ID二維數(shù)組重組為三維數(shù)組的方法,涉及php針對(duì)數(shù)組的遍歷與轉(zhuǎn)換操作相關(guān)技巧,需要的朋友可以參考下2016-08-08
php使用parse_str實(shí)現(xiàn)查詢字符串解析到變量中的方法
這篇文章主要介紹了php使用parse_str實(shí)現(xiàn)查詢字符串解析到變量中的方法,較為詳細(xì)的分析了parse_str()函數(shù)的功能及字符串解析為變量的具體用法,并總結(jié)了使用中的相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-02-02
PHP WebSocket的技術(shù)解析與使用指南詳解
在這篇文章中我們將深入討論從建立連接、綁定到監(jiān)聽等各方面的操作,并提供易于理解和實(shí)踐的指導(dǎo),希望可以幫助大家掌握在PHP中使用WebSocket的關(guān)鍵概念和技術(shù)2024-02-02
PHP實(shí)現(xiàn)判斷數(shù)組是一維、二維或幾維的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)判斷數(shù)組是一維、二維或幾維的方法,涉及php遞歸操作及數(shù)組相關(guān)判定技巧,需要的朋友可以參考下2017-02-02

