当前位置: 首页 > 编程笔记 >

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

勾向文
2023-03-14
本文向大家介绍PHP5.5和之前的版本empty函数的不同之处,包括了PHP5.5和之前的版本empty函数的不同之处的使用技巧和注意事项,需要的朋友参考一下

作为我最喜欢使用的函数之一,今天也终于发现这个函数的恶魔之处。洋洋洒洒写了以下代码,本地测试一切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这个函数可以应用于任何值,而不局限于变量。可以为常量、函数返回值等等。

 类似资料:
  • 要检查向量是否为空,我可以使用或。我查看了cplike上的签名,但缺乏理解它们的知识。它们如何相互关联?一个实现调用另一个实现吗? 我知道其中一个来自容器库,另一个来自迭代器库,但仅此而已。

  • 问题内容: 阅读mozilla文档后,我发现了这一点: 在全局执行上下文中(在任何函数之外),这指的是全局对象,无论是否处于严格模式下。 在玩了一点示波器之后,我发现在node.js REPL中… 但是当我用同一行创建脚本时… 是否有一个原因?还是一个错误? 问题答案: 节点是全局的。文件中的代码位于“模块”中,它实际上只是一个函数。 您的代码文件变成了如下所示的简化示例: 请注意,它是使用来执行

  • 问题内容: 我使用以下语法制作了一个带有数组的PHP页面: 可以在Windows上正常运行(PHP 5.4.6,使用EasyPHP安装),但是当我将同一页面上载到Ubuntu Server(PHP 5.3.10,使用apt- get从存储库安装)时,出现错误:“解析错误:语法错误,/var/www/ShapeTest_server_get_dados.php中第13行出现意外的’[‘”。第13行是

  • 前言:来自Microsoft论坛的交叉链接:http://social.msdn.microsoft.com/forums/office/en-us/47d1167b-24d0-43ed-b28b-21d8d82570a1/syncfolderhierarchy-differs-better-exchange-versions?forum=exchangesvrdevelopment 我一直在测试

  • 我正在做一些项目,其中一些使用不同的JDK。在JDK版本之间切换不舒服。所以我想知道是否有什么简单的方法来更改它? 我发现了2种方法,应该可以解决这个问题,但它不起作用。 第一个解决方案是创建这样的bat文件: 在运行了这个蝙蝠之后,我看到了正确版本的Java。但是当我关闭这个CMD并打开一个新的并输入“java版本”时,它说我仍然有1.8.0_25。所以它不起作用。 我找到的第二个解决方案是这个

  • 问题内容: 如果他们使用的是v9之前的版本,我想将我们网站的用户退回至错误页面。只是不值得我们花费时间和金钱来支持。使用其他所有非IE浏览器的用户都可以使用,不应被退回。这是建议的代码: 这段代码会成功吗? 首先,我将发表一些评论: 是的,我知道用户可以伪造字符串。我不担心 是的,我知道编程专家更喜欢嗅探功能支持而不是浏览器类型,但在这种情况下,我认为这种方法不可行。我已经知道所有(相关)非IE浏