如何防止嵌套函数调用?

时间:2014-02-24 10:09:36

标签: php nested

第一个问题,请原谅我,如果我做错了或者这是重复的,我找不到类似的其他问题。

我正在编写一个非常基本的翻译函数i18n($string1),当给定$string1时,它会查询索引。如果字符串与索引中的某些内容匹配,则返回翻译$string2。如果索引中不存在$string1,则会在索引中创建一个新条目,用户稍后可以将已翻译的$string2写入。

我想尝试解决的问题是,一个草率的开发人员(我)可能会不小心拨打电话i18n(i18n($string1))。这解析的方式是内部调用在索引中找到$string1,返回$string2,然后再次将其传递给函数,该函数尝试在索引中查找$string2。这会失败,因为$string2是翻译,它会提示用户翻译翻译......这没有帮助。

我相信我想要的是,在函数嵌套在自身内部的情况下,它返回字符串$string1。因此,无论我在其中调用i18n多少次,它总是翻译字符串$string1

最好的方法是什么?我考虑使用静态或全局$isCalled变量或单例,但过去我曾被告知这些解决方案几乎肯定是邪恶的,并且可能有更好的东西。

提前致谢!

1 个答案:

答案 0 :(得分:3)

你被告知是正确的。

你可以通过分析debug_backtrace(),但这确实是时间和资源消耗。这也是翻译功能不需要的开销。

如果开发人员使用已翻译的字符串调用翻译函数,则开发人员有责任解决该问题,而不是软件。

避免这种双重调用的一种方法是使用PHP_CodeSniffer并定义禁止此类使用的编码标准。如果两个函数不在同一行中,那么检查这些东西会很困难。