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 输出双引号"与单引号'的方法
May 09 PHP
php修改时间格式的代码
May 29 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
PHP输入流php://input介绍
Sep 18 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
PHP实现导出excel数据的类库用法示例
Oct 15 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
php遍历目录下文件并按修改时间排序操作示例
Jul 12 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 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中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
js 提交和设置表单的值
2008/12/19 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
js document.write()使用介绍
2014/02/21 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
NodeJs实现定时任务的示例代码
2017/12/05 NodeJs
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python刷投票的脚本实现代码
2014/11/08 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Python的几种主动结束程序方式
2019/11/22 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
pytorch SENet实现案例
2020/06/24 Python
python使用建议与技巧分享(一)
2020/08/17 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
什么是岗位职责
2013/11/12 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Java tomcat手动配置servlet详解
2021/11/27 Java/Android
springboot读取nacos配置文件
2022/05/20 Java/Android