第一个问题,请原谅我,如果我做错了或者这是重复的,我找不到类似的其他问题。
我正在编写一个非常基本的翻译函数i18n($string1)
,当给定$string1
时,它会查询索引。如果字符串与索引中的某些内容匹配,则返回翻译$string2
。如果索引中不存在$string1
,则会在索引中创建一个新条目,用户稍后可以将已翻译的$string2
写入。
我想尝试解决的问题是,一个草率的开发人员(我)可能会不小心拨打电话i18n(i18n($string1))
。这解析的方式是内部调用在索引中找到$string1
,返回$string2
,然后再次将其传递给函数,该函数尝试在索引中查找$string2
。这会失败,因为$string2
是翻译,它会提示用户翻译翻译......这没有帮助。
我相信我想要的是,在函数嵌套在自身内部的情况下,它返回字符串$string1
。因此,无论我在其中调用i18n
多少次,它总是翻译字符串$string1
。
最好的方法是什么?我考虑使用静态或全局$isCalled
变量或单例,但过去我曾被告知这些解决方案几乎肯定是邪恶的,并且可能有更好的东西。
提前致谢!
答案 0 :(得分:3)
你被告知是正确的。
你可以通过分析debug_backtrace(),但这确实是时间和资源消耗。这也是翻译功能不需要的开销。
如果开发人员使用已翻译的字符串调用翻译函数,则开发人员有责任解决该问题,而不是软件。
避免这种双重调用的一种方法是使用PHP_CodeSniffer并定义禁止此类使用的编码标准。如果两个函数不在同一行中,那么检查这些东西会很困难。