返回 PHP 中的方法

Returning a method in PHP

我有一个 class 叫 Converter

class Converter {
  public function convert($value, $from, $to){
    $this->switchUnitCall($from)($value, $to);
  }

  private function switchUnitCall($from){
    switch($from){
      case 'm':
        return $this->fromM; break;
      case 'km':
        return $this->fromKM; break;
    }
  }

  private function fromM($value, $to){}
  private function fromKM($value, $to){}
}

我想 return 调用 fromMfromKM 的私有方法给它的调用者,所以我可以在 fromM 中使用我的另一个自定义参数调用 fromM =16=]方法。

当我运行上面的代码时,出现错误Undefined property: Converter::$fromM

我的问题是,是否可以 return PHP 中的方法?它是如何完成的?谢谢。

您不能 return 方法,但您可以使用方法名称动态调用它:

class Converter {
  public function convert($value, $from, $to){
    $method=$this->switchUnitCall($from);
    $this->$method($value, $to);
  }

  private function switchUnitCall($from){
    switch($from){
      case 'm':
        return "fromM"; break;
      case 'km':
        return "fromKM"; break;
    }
  }

  private function fromM($value, $to){}
  private function fromKM($value, $to){}
}

您可以 return 您的方法,但请记住特定方法的可见性,以及可以从哪个范围调用它们。这两个方法是私有的,只能在给定的class内调用。

此代码的问题是您将方法作为属性调用,因此出现未定义 属性 的错误。

它们应该像带括号的方法一样被调用,并且必须传递 2 个 $this->fromM($value, $to),您还需要将参数 $value$to 传递给 switchUnitCall(),因为它们是也是强制性的。 另外,这两种方法需要return一个结果:

 class Converter {
      public function convert($value, $from, $to){
        $this->switchUnitCall($from, $value, $to);
      }

      private function switchUnitCall($from, $value, $to){
        switch($from){
          case 'm':
            return $this->fromM($value, $to); 
            break;
          case 'km':
            return $this->fromKM($value, $to); 
            break;
        }
      }

      private function fromM($value, $to){
       //return conversion
      }
      private function fromKM($value, $to){
       //return conversion
      }
    }