PHP5.5和之前的版本empty函数的不同之处

yipeiwu_com5年前PHP代码库

作为我最喜欢使用的函数之一,今天也终于发现这个函数的恶魔之处。洋洋洒洒写了以下代码,本地测试一切ok,到服务器上就SB了。

复制代码 代码如下:

if(strlen($passwd) < 6 || empty($preg_replace("/\d/", "", $passwd))) {
    //do something
}

大致的意思就是,密码必须大于6位切不能只由数字组成。找遍服务器日志,发现如下错误:
复制代码 代码如下:

PHP Fatal error: Can't use function return value in write context in /xxx/xxx/xx.php on line xxx

google了一下,大概是说,empty的参数不能为函数。我靠,本地明明是好的。看了下本地的PHP是5.5的,服务器是5.3的。难道这函数在2个版本之间就进化了么?找遍了PHP官方的文档没有发现任何端倪,然后google狂搜,不小心点到了PHP英文文档界面,在empty函数的介绍下面,发现了一行小字:

复制代码 代码如下:

Note:
Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.

恶魔啊,不带这么坑中文用户的。总结下empty函数的使用场景:

1.PHP 5.5之前的版本,这个函数是用来检查变量的赋值是否为0, false, 空字符串, null。任何非变量形式的参数都是导致这个函数报错。
2.PHP 5.5这个函数可以应用于任何值,而不局限于变量。可以为常量、函数返回值等等。

相关文章

关于PHP结束标签的使用细节探讨及联想

当PHP解析一个文件时,会寻找开始<?php和结束标记?>,标记告诉PHP开始和停止解释其中的代码。此种方式的解析可以使PHP嵌入到各种不同的文档中,凡是在一对开始和结束标记...

PHP获取文件行数的方法

本文实例讲述了PHP获取文件行数的方法。分享给大家供大家参考。具体分析如下: 提供两种实现方法,虽然第二种简单易懂,但是第一种效率最好 第一种: <?php $fil...

php插入排序法实现数组排序实例

本文实例讲述了php插入排序法实现数组排序的方法。分享给大家供大家参考。具体分析如下: 插入排序法的基本思路:同样以案例来说明,还是以$arr = array(2,6,3,9),由大到小...

详解提高使用Java反射的效率方法

详解提高使用Java反射的效率方法

在我们平时的工作或者面试中,都会经常遇到“反射”这个知识点,通过“反射”我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另一种声音的出现,那就是“反射”很...

如何在symfony中导出为CSV文件中的数据

开始: 复制代码 代码如下: public function executeRegistrantsToCsv(){ $id = $this->getRequestParameter...