gpt4 book ai didi

php - 在mysql中保存php函数

转载 作者:可可西里 更新时间:2023-11-01 07:58:53 25 4
gpt4 key购买 nike

创建游戏是我儿时的梦想,现在我真正知道我应该如何实现我的梦想,并开始在业余时间从事一个小游戏项目。它基本上是一种战斗类型的游戏,你有多达 3 个单位,还有你的对手,你轮流(因为它是 http,你知道那种感觉)互相攻击并施放法术和东西。我遇到的问题是能力以及如何存储它们。基本上,如果我将能力存储在一个数组中,它看起来像

$abilities = array(
0 => array(
'name' => 'Fire ball',
'desc' => 'Hurls a fire ball at your enemy, dealing X damage.'
'effect' => function($data){
$data['caster']->damage($data['target'], $data['caster']->magicPower);
}
),
1 => array(...
);

但如果我以这种方式存储能力,每次我需要获取有关单个能力的信息时,我都需要加载整个数组,并且它可能会随着时间的推移变得非常大,所以这将是一种巨大的浪费的内存。所以我跳到另一个选项,将功能保存在 mysql 表中,但是我在 effect 部分遇到问题。如何将函数保存到 mysql 字段中并能够按需运行?

或者如果您可以建议另一种保存能力的方法,我可能错过了。

最佳答案

为了回答有关将数组存储到 MySQL 等数据库中的问题,我希望您将数组序列化为字符串。正常的直接序列化不会工作,因为它们不处理关闭。

你需要使用像 super_closure 这样的类,它可以序列化方法并将它们转换为字符串。 Read more here

https://github.com/jeremeamia/super_closure

$helloWorld = new SerializableClosure(function($data){
$data['caster']->damage($data['target'], $data['caster']->magicPower);
});
$serializedFunc = serialize($helloWorld);

现在你可以像这样创建数组:

$abilities = array(
0 => array(
'name' => 'Fire ball',
'desc' => 'Hurls a fire ball at your enemy, dealing X damage.'
'effect' => $serializedFunc
));

这个数组现在可以直接保存、序列化或编码为 JSON。

我建议您使用 RedisMemcache 来缓存查询结果,不要使用 MySQL 来存储函数。

关于php - 在mysql中保存php函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23076311/

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