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 相关文章推荐
解析thinkphp基本配置 convention.php
Jun 18 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
Zend Framework入门知识点小结
Mar 19 PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 PHP
php读取本地json文件的实例
Mar 07 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP操作路由器实现方法示例
Apr 27 PHP
PHP日期和时间函数的使用示例详解
Aug 06 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中文件上传的安全问题
2006/10/09 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
PHP无限分类(树形类)
2013/09/28 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
jQuery 名称冲突的解决方法
2011/04/08 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
Python中类的继承代码实例
2014/10/28 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python元字符的用法实例解析
2018/01/17 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
师范生求职信
2014/06/14 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书