PHP STRING 陷阱原理说明


Posted in PHP onJuly 24, 2010

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 的判断,当传递一个 字符串过来的时候, 结果就不是我们预想的那样了。

仅此为记,以免以后也出现类似的问题。

PHP 相关文章推荐
PHP 和 XML: 使用expat函数(一)
Oct 09 PHP
支持数组的ADDSLASHES的php函数
Feb 16 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 PHP
PHP下操作Linux消息队列完成进程间通信的方法
Jul 24 #PHP
php抓取页面与代码解析 推荐
Jul 23 #PHP
由php的call_user_func传reference引发的思考
Jul 23 #PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 #PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 #PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 #PHP
PHP垃圾回收机制简单说明
Jul 22 #PHP
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
PHP输出缓冲控制Output Control系列函数详解
2015/07/02 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
用cssText批量修改样式
2009/08/29 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
npm的lock机制解析
2019/06/20 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
对命令行模式与python交互模式介绍
2018/05/12 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
Python列表切片操作实例总结
2019/02/19 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
python与字符编码问题
2019/05/24 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
Python常用外部指令执行代码实例
2020/11/05 Python
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
40岁生日感言
2014/02/15 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
项目申请汇报材料
2014/08/16 职场文书
出租房屋协议书
2014/09/14 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书