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 删除cookie和浏览器重定向
Mar 16 PHP
php实现文件下载更能介绍
Nov 23 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
Sep 22 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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
2006/12/14 PHP
php mysql数据库操作分页类
2008/06/04 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python使用py2exe打包程序介绍
2014/11/20 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
Python Flask基础教程示例代码
2018/02/07 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
酒店总经理欢迎词
2014/01/08 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
就业证明函
2015/06/17 职场文书
2016新年年会主持词
2015/07/06 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers