gpt4 book ai didi

php - 在 PHP 中根据变量值调用不同方法的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-01 18:51:13 25 4
gpt4 key购买 nike

有时您可能需要根据某些变量的值调用不同的函数。像这样的事情:

if ($var == 'someValue1') {
$someObj->abc();
} elseif ...
} elseif ($var == 'someValueN') {
$someObj->xyz();
}

有很多方法可以在 PHP 中完成此任务。我发现了 8 种可能的选择:

  1. 使用一堆if/else声明
  2. 使用switch声明
  3. 使用变量函数
  4. 使用匿名函数(定义匿名函数数组)
  5. 使用call_user_funccall_user_func_array功能
  6. 使用多态性:抽象基类+一堆子类
  7. 使用eval声明
  8. 使用ReflectionMethod::invoke方法

看起来这些方法是根据情况而定的。那么,请您解释一下在什么情况下我应该使用这些选项以及为什么?

附注:以下是您可能需要根据变量值调用不同方法的情况示例:

/**
* Checks if all needed parameters are present in the HTTP request
* @param array $params Parameters which have to be present in the request
* @throws MissingParameterException if any of the given parameters is missing
*/
public function checkParametersExistence($params)
{
foreach ($params as $param) {
$method = $param[0]; // a type of the param: get, post, put, delete
$name = $param[1]; // a name of the param
$code = $param[2]; // a code to send if this param is missing

// $exists = $this->request->isGetParamSet($name);
// ... = $this->request->isPostParamSet($name);
// ... = $this->request->isPutParamSet($name);
// ... = $this->request->isDeleteParamSet($name);

if ($exists == false) {
throw new MissingParameterException($name, $code);
}
}
}

最佳答案

我刚刚根据问题中的验证示例编写了一个简单的基准测试,以比较这些方法的执行速度。

测试执行验证循环 1000 次。测试重复 25 次以获得平均执行时间。代码可以在这里找到:https://gist.github.com/DWand/54ae49470ee8557432a3

机器配置:

  • CPU:Intel Core 2 Duo E7400 2.8GHz,RAM:4Gb
  • Windows 7 家庭高级版服务包 1
  • PHP 版本 5.4.11

我得到了以下结果:

  • 测试“If/Else 序列”:0.01506411552429199 秒。
  • 测试“切换”:0.01624316215515137 秒。
  • 测试“变量函数”:0.02013579368591309 秒。
  • 测试“匿名函数”:0.1487146759033203 秒。
  • 测试“函数 call_user_func”:0.1564707851409912 秒。
  • 测试“函数评估”:0.2150658702850342 秒。
  • 测试“反射”:0.02306700706481933 秒。
  • 测试“多态性”:0.02339528083801269 秒。

这些方法可以根据执行速度进行分组:

  • 如果/否则,切换(~ 0.016 秒)
  • 变量函数、ReflectionMethod、多态性(~ 0.023 秒)
  • 匿名函数,call_user_func(约 0.14-0.15 秒)
  • 评估(~ 0.21 秒)

由于这些结果是由一条语句执行 1000 * 7 次得出的,因此可以认为执行速度几乎相同。 eval 函数、匿名函数和 call_user_func 函数可能是要避免的候选函数,因为它们速度较慢。

关于php - 在 PHP 中根据变量值调用不同方法的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27750068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com