>  기사  >  php教程  >  小心使用PHP的empty函数

小心使用PHP的empty函数

WBOY
WBOY원래의
2016-06-06 20:10:50864검색

作为我最喜欢使用的函数之一,今天也终于发现这个函数的恶魔之处。洋洋洒洒写了以下代码,本地测试一切ok,到服务上就SB了。 if(strlen($passwd) 6 || empty($preg_replace("/\d/", "", $passwd))) { //do something} 大致的意思就是,密码必须大于6位切不能

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

<code>if(strlen($passwd) </code>

大致的意思就是,密码必须大于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这个函数可以应用于任何值,而不局限于变量。可以为常量、函数返回值等等。

最后附上2个链接,看看文档是如何坑人的:

PHP:empty 中文参考

PHP:empty 英文参考

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.