Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回PHP中的方法_Php_Function_Return Value - Fatal编程技术网

返回PHP中的方法

返回PHP中的方法,php,function,return-value,Php,Function,Return Value,我有一个叫做Converter 类转换器{ 公共函数转换($value、$from、$to){ $this->switchUnitCall($from)($value,$to); } 专用函数switchUnitCall($from){ 转换($from){ 案例“m”: 返回$this->fromM;break; 案例“km”: 返回$this->fromKM;break; } } 私有函数fromM($value$to){} 私有函数fromKM($value$to){} } 我想将名为f

我有一个叫做
Converter

类转换器{
公共函数转换($value、$from、$to){
$this->switchUnitCall($from)($value,$to);
}
专用函数switchUnitCall($from){
转换($from){
案例“m”:
返回$this->fromM;break;
案例“km”:
返回$this->fromKM;break;
}
}
私有函数fromM($value$to){}
私有函数fromKM($value$to){}
}
我想将名为
fromM
fromKM
的私有方法返回给它的调用者,这样我就可以使用
convert
方法中的另一个自定义参数调用
fromM

当我运行上面的代码时,我得到了错误
未定义的属性:Converter::$fromM


我的问题是,是否可以在PHP中返回一个方法?这是怎么做到的?谢谢。

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

类转换器{
公共函数转换($value、$from、$to){
$method=$this->switchUnitCall($from);
$this->$method($value,$to);
}
专用函数switchUnitCall($from){
转换($from){
案例“m”:
返回“fromM”;中断;
案例“km”:
返回“fromKM”;中断;
}
}
私有函数fromM($value$to){}
私有函数fromKM($value$to){}
}

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

这段代码的问题是,您已经将方法作为属性调用,因此未定义属性的错误

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

 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
      }
    }

这是您的实际案例还是示例,最好将开关/案例放在
convert
方法中,而不是将其传递给其他人。我建议使用通过方法名称访问的可调用返回:谢谢您的回答。根据您的代码,我必须为每种情况编写冗余参数,这将花费很长时间,而不是调用它时只需一次。