php中的坑
来源:互联网 发布:免费的读书软件 编辑:程序博客网 时间:2024/06/05 20:13
‘abc' == 0 return true
因为这是一个数字和一个字符串进行比较,PHP会把字符串转换成数字再进行比较。PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。例如:123abc转换后应该是123,而abc则为0,0==0这当然是成立的.具体可以参考官方手册:如果比较一个整数和字符串,则字符串会被转换为整数
null和空、0,三个值的比较
在PHP中,== 会先进行类型转换,再进行对比,而===会先比较类型,如果类型不同直接返回不相等,参考如下示例
$a = null; $b = ''; $c = 0; echo ($a == $b)?1:0; // 输出1 echo ($a === $b)?1:0; // 输出0 echo ($a == $c)?1:0; // 输出1 echo ($a === $c)?1:0; // 输出0 echo ($b == $c)?1:0; // 输出1 echo ($b === $c)?1:0; // 输出0
3.foreach里的引用赋值,参见官方文档
在官方文档里有一句警告:Warning 数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。
我们看一组代码:
$a = [1,2,3];foreach($a as &$item){ echo $item . ',';}//unset($item); // 引用赋值后不销毁对象foreach($a as $item){ echo $item . ',';}
上面的代码的输出如下:
1,2,3,1,2,2 看最后一个输出的是2,而不是3,就是因为代码里没有销毁$item造成的,原因如下:
第一个循环,把3的引用赋给了$item,第二个循环,把1赋给了$item,因为$item是引用,导致数组的元素3变成了1,明白了吗?
4. isset与empty的联系和区别
empty对如下8种情况返回true:
null、 空串""、字符串0"0"、空array、布尔值false、数字0、浮点数0.0、类里用var定义但是未赋值 www.stuhack.com
isset 检测变量是否设置,并且不是 NULL,但是对于empty的8种情况,只有null返回false,其它7种情况都返回true
综上所述,除了empty描述的的非null的7种情况,在其它情况下, if(empty(变量)) 等效于 if(!isset(变量))
5. strrchr函数
在W3School站点上的注释如下:
strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
如果成失败,否则返回 false。
实际上,这个函数是查找某个字符,而不是查找字符串,应该参考官方文档
代码示例:
$a = 'abcdef.txt';$b = '.php';echo strrchr($a, $b);
上面的代码输出是:.txt
也就是说,如果$b是字符串,只使用第一个字符,后面的其它字符会忽略
注:php提供了strstr函数,为什么不提供strrstr函数呢,虽然自己实现也很简单
- php中的坑
- php中的坑
- php开发中的坑,php数组指针
- php memcached使用中的坑
- php中的&
- [PHP]php中的JSON
- PHP php中的@作用
- PHP php中的@作用
- PHP 删除数组元素中的坑
- php cli 命令行中的php
- PHP中的正规表达式
- PHP中的加密功能
- PHP中的加密功能
- PHP中的加密功能
- PHP中的加密功能
- php中的cookie
- php中的iconv functions
- PHP中的页面跳转
- find mtime参数+号,-号,不带符号的用法
- Android M权限管理
- Android CircleImageView自定义圆环头像控件的使用
- 在 CI 中使用 composer 安装的依赖包
- 如何在 Ubuntu 中删除来宾会话 16.04 登录屏幕
- php中的坑
- MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
- 【HDU 1016】Prime Ring Problem(DFS)
- IDEA创建Java项目
- OSG结点的父子索引变化
- VS2012下安装配置OpenCV2.4.9的方法
- 机器学习的发展趋势——bigData2smallData or bigData2massiveData
- 从1到n整数中1出现的次数
- JavaScript DOM 创建元素并设置属性