gpt4 book ai didi

php - 您如何创建一个包含环绕常用代码的代码块的函数?

转载 作者:行者123 更新时间:2023-11-29 04:27:58 24 4
gpt4 key购买 nike

我有一个 do...while 循环和一个 try...catch block ,它们环绕着以数据库为中心的代码。 do...while 和 try...catch 的目的是防止事务死锁,经过广泛的测试后效果非常好。我现在的问题是代码冗余。我想不出一种方法来部署执行 do...while 和 try...catch 的函数或方法,而不使用“邪恶的”eval 命令来绕过一组通用的以数据库为中心的代码。我想这会出现在其他软件设计模式场景下。

这说明了我如何想象使用 eval 的方法:

class Database {
public static function deadlockSafeTransaction($code) {
do {
// setup a condition
try {
// start transaction

eval($code); //evil

// commit transaction
}
catch(Exception $ex) {
// rollback transaction
// analyze exception for deadlock and adjust condition or rethrow exception
}
} while(condition);
}
}

如果我使用上述方法,这说明了一种不受欢迎的编码做法:

// code

Database::deadlockSafeTransaction("
// code - sometimes a lot of complicated code with other method calls and loops
");

// code

我正在寻找不包括使用 eval 命令的解决方案。

写完所有这些之后,我想到了在我的代码两侧添加 include 语句的可能性:

include "do-try.php";
// database code
include "catch-while.php";

但我正在寻找更 OOPish 和更少 hackish 的东西。我什至不知道以上是否可行,并且包含可能会带来不必要的性能开销。因此,该问题仍值得探讨和讨论以寻求最佳解决方案。

最佳答案

你可以传入一个匿名函数:

$myFunction = function() {
// do something
};

Database::deadlockSafeTransaction($myFunction);

调用 deadlockSafeTransaction 代码中的函数:

public static function deadlockSafeTransaction($myFunction) {
...
$return = $myFunction();
...
}

更多信息是available in the PHP docs .如果您使用的是 < 5.3.x 的 PHP,您还可以使用 call_user_func方法。

关于php - 您如何创建一个包含环绕常用代码的代码块的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7651195/

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