用PHP中的 == 运算符进行字符串比较

yipeiwu_com5年前PHP基础知识

最近在Greg Beaver's的blog上发表的一篇新文章 comparing strings in PHP with the == operator 中提及了PHP的 == 运算符在对字符串进行比较时值得注意的问题。

  在某些情况下,PHP会把类数值数据(如含有数字的字符串等)转换成数值处理,== 运算符就是其中之一。在使用 == 运算符对两个字符串进行松散比较时,PHP会把类数值的字符串转换为数值进行比较,下面的实验证实了这个结论:

<?php
var_dump('01' == 1);
?>


以上代码输出结果为:
bool(true)

  所以,在使用对字符串进行比较时,建议使用 === 运算符对字符串进行严格的检查,或使用strcmp()等函数,从而避免可能产生的问题。PHP手册中的《PHP 类型比较表》对此也有详细说明。

  除此之外,常用的in_array()函数也存在弱类型的问题,见如下代码:

<?php
var_dump(in_array('01', array('1')));
?>


以上代码输出结果为:
bool(true)

  相信用过该函数进行安全性检查的PHP编程人员都知道这会产生怎么样的安全问题了吧?幸好in_array()函数为我们提供了第三个参数,把它设为 true 就可以打开in_array()函数的强制类型检查机制,如下代码所示:

<?php 
var_dump(in_array('01', array('1'), true)); 
?>


输出结果为:
bool(false)

  由于PHP是一种弱类型的语言,也就是说数据类型这个概念在PHP中被弱化。因而如果在编程时过分忽略数据类型(也是大部份PHP程序员的通病),会产生一些问题,甚至导致安全漏洞。最后,还是那句说得很烦很烦的话,对外来数据进行严格检查和过滤。                                                

相关文章

php循环输出数据库内容的代码

php do while方法     一般需要先$row=mysql_fetch_array($result)然后 do{ something...

PHP单元测试配置与使用方法详解

PHP单元测试配置与使用方法详解

本文实例讲述了PHP单元测试配置与使用方法。分享给大家供大家参考,具体如下:php与其他语言不太一样,单元测试需要自己安装和配置,相对麻烦一点,不过单元测试对于提高库的稳定性和健壮性还是非...

ffmpeg处理pcm转mp3的参数设置详解

MP3截取ffmpeg -y -i test.mp3 -ss 00:00:00 -t 00:00:03 -acodec&...

PHP七种数据类型知识点总结

想要入门PHP,首先要学会搭建环境,其次是学习基础语法。PHP的基础包括数据类型,运算符,变量和常量等。在这篇文章中,我们主要了解什么是数据类型。数据类型是指同种数据的一个统称,一般会描述...

php 多个变量指向同一个引用($b = &$a)用法分析

本文实例讲述了php 多个变量指向同一个引用($b = &$a)用法。分享给大家供大家参考,具体如下:引用是什么? 引用就是多个变量指向同一个内存区域地址。如我们经常用的实例一个类...