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 mysql 判断update之后是否更新了的方法
Jan 10 PHP
php设计模式之命令模式的应用详解
May 21 PHP
php获取操作系统语言代码
Nov 04 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
YII2.0之Activeform表单组件用法实例
Jan 09 PHP
php简单实现数组分页的方法
Apr 30 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 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 高性能书写
2010/12/11 PHP
thinkphp实现数组分页示例
2014/04/13 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
Python获取某一天是星期几的方法示例
2017/01/17 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
简单了解django缓存方式及配置
2019/07/19 Python
Django之模板层的实现代码
2019/09/09 Python
Python requests获取网页常用方法解析
2020/02/20 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
单位工程竣工验收方案
2014/03/16 职场文书
宿舍标语大全
2014/06/19 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
初中学习计划书范文
2014/09/15 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android