gpt4 book ai didi

php - 在 switch 语句中重复代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:48 25 4
gpt4 key购买 nike

我有这样的 switch 语句:

switch(x){
case a:
executeSth();
executeA();
break;
case b:
executeSth();
executeB();
break;
...
}

所以executeSth();除了在默认情况下应该总是执行,但在它之后调用一些特定情况的代码(executeA(); 或 executeB() 等等)。 (所以简单地把它放在开关前面是行不通的)。

有没有一种有效的方法来减少“executeSth();”的数量?不牺牲性能?

我只能想象将它分成两个开关(一个执行 executeSth() 和一个执行特定代码),但这会牺牲性能。也许您有更好的想法?

我基本上对 c/c++ 或 php 的代码感兴趣。我的目标是最小化代码大小,如果是 c/c++,则最小化生成的可执行文件的大小。

编辑:是的,函数的顺序很重要。Edit2:我无法在 PHP 或 C++ 之间做出选择,我需要两者都尽可能好。

最佳答案

嵌套的开关是一个选项...

这使用两个开关,但在 default 情况下不会触发第二个开关,因此性能配置文件略微优于仅两个内联开关。

switch($x) {
case a: case b: case c:
executeSth();
switch($x) {
case a:
executeA();
break;
case b:
executeB();
break;
case c:
executeC();
break;
}
break;
default:
...
}

或者,变量函数可以完成这项工作...

这是一个可能有效的 PHP 选项,尽管很多人不喜欢变量函数。如果您想完全删除嵌套和重复,这可能是最佳选择。

switch($x) {
case a:
$function = "executeA";
break;
case b:
$function = "executeB";
break;
case c:
$function = "executeC";
break;
default:
...
}

if(isset($function)) {
executeSth();
$function();
}

我也做了一点 live test bed here ,如果有人想在发布之前测试他们的 PHP 解决方案是否有效(case 10 应该 executeSth()executeA()case 20 应为 executeSth()executeB()default 应为 executeDefault()).

在C++中,可以使用函数指针实现与上面相同的功能

当我写这篇文章的时候,我脑袋放了个屁,幸好 idipous 提醒我我们可以用一个简单的函数指针来做到这一点。

// Declare function pointer
int (*functionCall)() = NULL;

// In switch statement, assign something to it
functionCall = &execute;

// After the switch statement, call it
int result = (*functionCall)();

注意:我不在所以没有检查这些语法。我使用的语法是 C 语法,可能需要进行一些小的更改才能在 C++ 中使用。

关于php - 在 switch 语句中重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18576111/

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