【问题标题】:Why this expression return error and how can I resolve? [duplicate]为什么这个表达式返回错误,我该如何解决? [复制]
【发布时间】:2013-04-26 19:06:16
【问题描述】:

这段代码:

if(!empty(trim($_POST['post']))){ }

返回此错误:

致命错误:无法在...中的写入上下文中使用函数返回值

如何解决并避免进行 2 次检查(修剪然后清空)?

我想检查 POST 是否不仅仅是一个空格。

【问题讨论】:

  • 你真的读过the documentation page吗?它明确指出只有变量在 PHP 中与 empty() 一起使用
  • 看到这个答案:stackoverflow.com/a/2173318/561731
  • 我想检查一下POST是否不仅仅是一个空格。
  • 为什么不只是trim($_POST['post']) !== ""trim $_POST 值只能是字符串,trim 无论如何都会转换为字符串。
  • @OneTrickPony 最有趣的是警告中的示例使用精确修剪功能来显示问题:)

标签: php


【解决方案1】:

你不能在 isset , empty 语句中使用函数。只需将 trim 的结果赋给一个变量即可。

$r = trim($_POST['blop']);

if(!empty($r))....

编辑:PHP 5.5 之前的版本

【讨论】:

    【解决方案2】:
    if (trim($_POST['post'])) {
    

    在功能上等同于您似乎正在尝试做的事情。无需拨打!empty

    【讨论】:

      【解决方案3】:
      if (trim($_POST['post']) !== "") {
          // this is the same
      }
      

      【讨论】:

        【解决方案4】:

        documentation 中它实际上专门解释了这个问题,然后为您提供了一个替代解决方案。你可以使用

        trim($name) == false.
        

        【讨论】:

        • PHP 文档甚至推荐此解决方案的原因超出了我的理解。为什么要提倡不必要的类型强制? (我不是说它慢,但这是事情的原理!)
        • 我不确定,但这是最短的解决方案。
        • !trim($name) 更短 :-) 就此而言,trim($name) === ''!
        【解决方案5】:

        在 PHP 中,函数 isset()empty() 用于测试变量

        就是这个意思

        if(empty("someText")) { ... }
        

        或者这个

        if(isset(somefunction(args))) { ... }
        

        没有任何意义,因为函数的结果总是被定义的,等等

        这些函数用于判断变量是否已定义,因此参数必须是变量或带索引的数组,然后它会检查索引(也适用于对象),例如

        if(!empty($_POST["mydata"])) {
            //do something
        } else {
            echo "Wrong input";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-13
          • 1970-01-01
          相关资源
          最近更新 更多