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 编写的日历
Oct 09 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
一些php技巧与注意事项分析
Feb 03 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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 visitFile()遍历指定文件夹函数
2010/08/21 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
python进程和线程用法知识点总结
2019/05/28 Python
python多线程下信号处理程序示例
2019/05/31 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
资产经营总监岗位职责范文
2013/12/01 职场文书
英语自荐信常用语句
2013/12/13 职场文书
社会调查研究计划书
2014/05/01 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书