【问题标题】:PHP Pass a function as a parameter in another function [duplicate]PHP将一个函数作为参数传递给另一个函数[重复]
【发布时间】:2021-06-18 21:43:50
【问题描述】:

我有两个函数 - 第一个函数很复杂,加载大约需要 15 秒,因为它从第三方获取数据。第二个是正常功能。为了说明这就是我所拥有的

<?php
class ComplexFunctions{

public function complexFunctionOne($x){
// do something
}

}

?>

<?php

function SimpleFunction($y, $z){
if($y){
// if $y is true use variable z
}else{
//if $y is false don't use variable z
}
return $a;
}

$cf = new ComplexFunctions();

$input_y = 'Y';
$input_y = 'Z';
$output = SimpleFunction($input_y, $cf->complexFunctionOne($input_y);

?>

只有当第一个变量$y 为真时,我才需要运行复杂函数$y。如果不是,我不想运行它。

不幸的是,无论 $y 是真还是假 - $cf-&gt;complexFunctionOne($input_y) 在任何情况下仍然会被加载。这可能会花费很多无用的时间来处理我不想要的东西,除非它被专门调用。

一种解决方案可能是在简单函数中调用$cf-&gt;complexFunctionOne($input_y),但是,我手上有很多复杂的函数,例如complexFunctionTwo,我只想根据情况使用,而不是使用 Switch/Case 语句。

【问题讨论】:

标签: php oop


【解决方案1】:

为了传递一个函数,你可以:

$output = SimpleFunction($input_y, function() use ($input_y, $cf){ 
    return $cf->complexFunctionOne($input_y);
};

那么你只需要:

function SimpleFunction($y, $z){
  if($y){
     // if $y is true use variable z
     $a = $z();
  }else{
     //if $y is false don't use variable z
     $a = ...;
  }
  return $a;
}

这样你将“延迟加载”$z的结果

【讨论】:

  • 箭头函数是创建匿名函数的更简洁的方式。 $output = SimpleFunction($input_y, fn() =&gt; $cf-&gt;complexFunctionOne($input_y));
  • @miken32 他没有提到PHP版本...所以我用这个来避免语法问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2020-01-06
相关资源
最近更新 更多