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类
Apr 09 PHP
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
php面向对象全攻略 (十七) 自动加载类
Sep 30 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
PHP常用编译参数中文说明
Sep 27 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
php获取一定范围内取N个不重复的随机数
May 28 PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 PHP
完美的php分页类
Oct 24 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
详解Laravel设置多态关系模型别名的方式
Oct 17 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中去掉字符串首尾空格的方法
2012/05/19 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
php常用正则函数实例小结
2016/12/29 PHP
Nginx实现反向代理
2017/09/20 Servers
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
python连接池实现示例程序
2013/11/26 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
Python中常用的内置方法
2019/01/28 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
python基于openpyxl生成excel文件
2020/12/23 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
介绍Java的内部类
2012/10/27 面试题
银行实习生自我鉴定范文
2013/09/19 职场文书
专科毕业生就业推荐信
2013/11/01 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
nginx 配置指令之location使用详解
2022/05/25 Servers