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中curl_multi的应用
Jul 17 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
Symfony的安装和配置方法
Mar 17 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
PHP7 其他修改
Mar 09 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
用缓存实现静态页面的测试
2006/12/06 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
js一组验证函数
2008/12/20 Javascript
玩转方法:call和apply
2014/05/08 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
求职简历推荐信范文
2013/12/02 职场文书
老师给学生的表扬信
2014/01/17 职场文书
校运会广播稿100字
2014/01/27 职场文书
总经理司机岗位职责
2014/02/06 职场文书
二人合伙经营协议书
2014/09/13 职场文书
商品陈列协议书
2014/09/29 职场文书
品德与社会教学反思
2016/02/24 职场文书