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
Windows下的PHP5.0详解
Nov 18 PHP
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
PHP curl使用实例
Jul 02 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
php链式操作的实现方式分析
Aug 12 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
8个必备的PHP功能实例代码
2013/10/27 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
php封装的page分页类完整实例
2016/10/18 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
PHP实现简单的计算器
2020/08/28 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
javascript常用对话框小集
2013/09/13 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
python逆向入门教程
2018/01/15 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
培训主管的岗位职责
2013/11/23 职场文书
办公室岗位职责
2014/02/12 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
党员转正申请报告
2015/05/15 职场文书
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
Go语言入门exec的基本使用
2022/05/20 Golang