PHP debug_backtrace生产代码中获取有关调用方法的信息?
2022-08-30 13:59:08
是否有令人信服的理由不使用debug_backtrace
来确定调用方法的类、名称和参数列表?不用于调试目的。它的函数名称中有“debug”这个词,这让我觉得以这种方式使用它有点脏,但它符合我需要做的事情(一个可以从许多地方调用的单个函数,需要从另一个系统调用调用方法)。它有效,但这仍然是一个坏主意吗?如果是,为什么?
是否有令人信服的理由不使用debug_backtrace
来确定调用方法的类、名称和参数列表?不用于调试目的。它的函数名称中有“debug”这个词,这让我觉得以这种方式使用它有点脏,但它符合我需要做的事情(一个可以从许多地方调用的单个函数,需要从另一个系统调用调用方法)。它有效,但这仍然是一个坏主意吗?如果是,为什么?
它确实感觉有点脏,但正如其他地方已经很好地记录,观点和殴打致死一样,PHP不是一个为优雅而设计的系统。
在应用程序逻辑中使用debug_backtrace的一个非常复杂的原因是,将来在PHP上工作的开发人员可能会决定“这只是一个调试功能,性能无关紧要”。
如果你对一种“更好”的方法感兴趣,你可以使用PHP的魔术常量来传递调用方法和类名,然后使用RefleventMethod对象来提取你需要的任何其他信息。
我最好加上引号,因为虽然这样会更干净、更正确,但实例化反射对象的开销可能比使用debug_backtrace函数更大。
是否有令人信服的理由不使用debug_backtrace来确定调用方法的类、名称和参数列表?
是的。关键是,如果你的代码需要如此紧密的耦合,以至于被调用方必须拥有关于其调用方的这些信息,因为它破坏了引用透明度,这通常是设计不良的标志。因此,如果您觉得有必要使用这些信息,则可能应该重新考虑您的设计。
被叫方不需要这些信息来执行其任务。当然,异常围绕着调试、日志记录和更一般的其他类型的代码内省(但即使在那里,也要小心它)。