gpt4 book ai didi

php - PHP 中的事件驱动架构和 Hook

转载 作者:行者123 更新时间:2023-12-03 01:04:25 24 4
gpt4 key购买 nike

我计划开发一款具有 PHP 后端来与数据存储库通信的游戏。我在思考这个问题并得出结论,我们的游戏遵循的最佳设计范式将是事件驱动的。我希望有一个成就系统(类似于该网站的徽章系统),基本上我希望能够将这些“成就检查”与游戏中发生的许多不同事件 Hook 。即:

当用户执行操作 X 钩子(Hook) Y 时,就会触发 Y,并调用所有附加函数来检查成就要求。

在构建这样的架构时,我将允许轻松添加新的成就,因为我所要做的就是将检查功能添加到正确的 Hook 中,其他一切都会就位。

我不确定这是否是对我打算做的事情的一个很好的解释,但无论如何我正在寻找以下内容:

  1. 关于如何编写事件驱动应用程序的良好引用资料
  2. 显示如何在 PHP 函数中放置“钩子(Hook)”的代码片段
  3. 显示如何将函数附加到第 2 点中提到的“钩子(Hook)”的代码片段

关于如何实现 2) 和 3),我有一些想法,但我希望精通该问题的人能够阐明最佳实践。

提前谢谢您!

最佳答案

Good reference material on how to code an event-driven application

您可以使用 "dumb" callbacks 来执行此操作(Demo):

class Hooks
{
private $hooks;
public function __construct()
{
$this->hooks = array();
}
public function add($name, $callback) {
// callback parameters must be at least syntactically
// correct when added.
if (!is_callable($callback, true))
{
throw new InvalidArgumentException(sprintf('Invalid callback: %s.', print_r($callback, true)));
}
$this->hooks[$name][] = $callback;
}
public function getCallbacks($name)
{
return isset($this->hooks[$name]) ? $this->hooks[$name] : array();
}
public function fire($name)
{
foreach($this->getCallbacks($name) as $callback)
{
// prevent fatal errors, do your own warning or
// exception here as you need it.
if (!is_callable($callback))
continue;

call_user_func($callback);
}
}
}

$hooks = new Hooks;
$hooks->add('event', function() {echo 'morally disputed.';});
$hooks->add('event', function() {echo 'explicitly called.';});
$hooks->fire('event');

或者实现事件驱动应用程序中常用的模式:Observer Pattern .

Code snippet(s) showing how to put a "hook" in a function in PHP

上面的手动链接(回调可以存储到变量中)和一些PHP code examples for the Observer Pattern .

关于php - PHP 中的事件驱动架构和 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846118/

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