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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
php基础知识:类与对象(4) 范围解析操作符(::)
Dec 13 PHP
PHP 实用代码收集
Jan 22 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
yii操作session实例简介
Jul 31 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php生成随机颜色方法汇总
Dec 03 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
php实现session共享的实例方法
Sep 19 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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 Global定义全局变量使用说明
2013/08/15 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
vue实现循环切换动画
2018/10/17 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
Python性能分析工具Profile使用实例
2019/11/19 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
jupyter 添加不同内核的操作
2021/02/06 Python
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
公司自我介绍演讲稿
2014/08/21 职场文书
活动总结模板大全
2015/05/11 职场文书
大国崛起观后感
2015/06/02 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
话题作文之自信作文
2019/11/15 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers