PHP STRING 陷阱原理说明

2015-01-24信息快讯网

需要注意的时候,我们访问数组的时候 都是使用方括号“[]”,string作为一个也可以使用操作符“[]”进行访问。但是,需要注意的一点就是,访问字符串时候,操作符“[]”中的内容会被转化为int类型的。

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写UltraEdit插件脚本实现方法
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
如何使用Linux的Crontab定时执行PHP脚本的方法
在WINDOWS中设置计划任务执行PHP文件的方法
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
PHP spl_autoload_register实现自动加载研究
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
PHP循环语句笔记(foreach,list)
PHP中strtotime函数使用方法详解
Linux fgetcsv取得的数组元素为空字符串的解决方法
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
PHP mb_convert_encoding文字编码的转换函数介绍
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
PHP及Zend Engine的线程安全模型分析
PHP支持多种格式图片上传(支持jpg、png、gif)
提示Trying to clone an uncloneable object of class Imagic的解决
PHP IN_ARRAY 函数使用注意事项
PHP下操作Linux消息队列完成进程间通信的方法
php 模拟POST|GET操作实现代码
在Windows系统上安装PHP运行环境文字教程
php下使用strpos需要注意 === 运算符
Windows下XDebug 手工配置与使用说明
PHP 数组遍历方法大全(foreach,list,each)
PHP extract 将数组拆分成多个变量的函数
《Head First 设计模式》代码之PHP版(面向对象学习)第1/2页
PHP print类函数使用总结
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
PHP XML error parsing SOAP payload on line 1
PHP stristr() 函数(不区分大小写的字符串查找)
php strstr查找字符串中是否包含某些字符的查找函数
php trim 去除空字符的定义与语法介绍
一个PHP的String类代码
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
php addslashes和mysql_real_escape_string
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
©2014-2024 dbsqp.com