【问题标题】:Fatal error: Can't use method return value in write context in <filename> on line <ifconditioin statement>致命错误:不能在 <ifconditioin statement> 行 <filename> 的写入上下文中使用方法返回值
【发布时间】:2012-11-28 22:49:56
【问题描述】:

我收到以下代码的错误

     class Myclass {
              //...variables

              public function getName() {
                       return $this->strName;
              }

              public function checkDup() {
                      if(empty($this->getName())) {  //HERE IS THE ERROR
                        $strMessage = 'Please Enter First Name';
                        return $strMessage;
                      }
              }
     }

     $a = new Myclass (); //assume constructor is present and variables are set in class
     $a->checkDup();

有什么解决办法? 我的 getName() 函数返回变量的名称

【问题讨论】:

    标签: php class fatal-error


    【解决方案1】:

    我不喜欢这里的任何答案。是的,您可以直接引用$this-&gt;strName。但如果你不能呢?如果getName() 有一些重要的功能怎么办?

    那么唯一的选择是创建另一个变量? $var = $this-&gt;getName();。 这也很糟糕。

    通常,每当我动态访问类属性或函数时,我都会将其括在大括号 {} 所以:

    1. 我知道它是动态的。
    2. 如果有任何错误,我会收到有意义的错误。

    例子:

    $this->{$variable};
    $this->{$class->property};
    $this->{$class->method()};
    $this->{function()};
    $this->{$array['index']};
    

    【讨论】:

      【解决方案2】:

      我知道这里出了什么问题。

      我应该使用 $this 来引用类成员变量,而不是在类中再次调用 getName() 函数。这会将函数更改为:

                public function checkDup() {
                        if(empty($this->strName)) {  //HERE IS THE SOLUTION
                          $strMessage = 'Please Enter First Name';
                          return $strMessage;
                        }
                }
      

      【讨论】:

        【解决方案3】:

        empty 这样的构造有点傻。见the manual:

        注意:

        在 PHP 5.5 之前,empty() 只支持变量;其他任何事情都会 导致解析错误。换句话说,以下内容将不起作用: 空(修剪($名称))。相反,请使用 trim($name) == false。

        【讨论】:

        • 感谢您的意见。是的,我知道你提到的。但在这里,我只是返回类变量的值。 “相反,使用 trim($name) == false。”请注意,使用此上下文时。如果 $name 中的值是数字 0,则不能使用。这可能是要求。相反,我们可以这样做:- $name = trim($name); if(empty($name)) { //你的代码 }
        • 是的,你正在返回一些东西。而你不能这样做。 empty($this-&gt;foo) 有效,empty($this-&gt;getFoo()) 无效,$foo = $this-&gt;getFoo(); empty($foo); 再次有效。手册对此非常清楚。
        【解决方案4】:

        改变:

        if(empty($this->getName())) {
        

        $name = $this->getName();
        if( empty($name) ) {
        ...
        

        empty() 仅检查变量,因为其他任何内容都会导致解析错误

        【讨论】:

          猜你喜欢
          • 2011-10-12
          • 2012-08-21
          • 1970-01-01
          • 2016-08-12
          • 1970-01-01
          • 2015-04-13
          • 1970-01-01
          • 1970-01-01
          • 2019-11-06
          相关资源
          最近更新 更多