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基础知识:函数基础知识
Dec 13 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
PHP 编程安全性小结
Jan 08 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP实现动态创建XML文档的方法
Mar 30 PHP
PHP实现的大文件切割与合并功能示例
Apr 10 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 PHP
php的命名空间与自动加载实现方法
Aug 25 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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多个版本的分析解释
2011/07/21 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
python if not in 多条件判断代码
2016/09/21 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
初级Java程序员面试题
2016/03/03 面试题
opencv实现图像几何变换
2021/03/24 Python
《穷人》教学反思
2014/04/08 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python