第一个问题,如果我做错了或者这是重复的,请原谅我,我找不到其他类似的问题.
我正在编写一个非常基本的转换器函数i18n($string1),当给定$string1时,它会查询索引.如果字符串与索引中的某项匹配,则返回翻译$string2.如果索引中不存在$string1,则会在索引中创建一个新条目,以便用户稍后将转换后的$string2写入其中.
我想尝试解决的问题是,草率的开发人员(me)可能不小心拨打了i18n(i18n($string1)).解决的方法是内部调用在索引中找到$string1,返回$string2,然后再次将其传递给试图在索引中找到$string2的函数.这将失败,因为$string2是翻译,并且会提示用户翻译翻译…这没有帮助.
我相信我想要的是,在函数被称为嵌套在自身内部的情况下,它返回字符串$string1.因此,我在内部调用i18n的次数无关紧要,它总是转换字符串$string1.
做这个的最好方式是什么?我考虑过使用静态或全局$isCalled变量或单例变量,但过去有人告诉我,这些解决方案几乎可以肯定是邪恶的,而且可能还有更好的方法.
提前致谢!
解决方法:
您被告知正确.
您可以通过分析debug_backtrace()进行操作,但这确实很耗时间和资源.同样,这也不是翻译功能的开销.
如果开发人员使用已翻译的字符串调用翻译功能,则开发人员应负责解决此问题,而不是软件.
避免重复调用的一种方法是使用PHP_CodeSniffer并定义将禁止这种用法的编码标准.如果两个功能不在同一行,则很难检查这些内容.
标签:nested,php
来源: https://codeday.me/bug/20191122/2056789.html