我有两个控制器
login.php
auth.php
两者都进行与安全相关的检查(检查以确保用户没有多次登录)。他们都称之为以下功能:
isThrottled()
我想将这些检查功能移到特征上,这样我就可以在上面这两个控制器之间共享它们了。
分享使用特征的功能的最佳方式是什么?或者只是将它们放在父控制器中?他们都有同一个父母。
答案 0 :(得分:1)
我认为你可以合理地使用这种情况,但我个人会选择有一个(可能是抽象的)父类,即login.php和auth.php中的类扩展。
Traits,对我而言,是指您可以在多个类中使用和重用的一组函数,这些函数不一定相关。我认为str_replace()和strstr()等函数是全局特征中的方法,即PHP“对象”。无论您正在做什么,您都需要这些功能,因为它们是您工具包中的有用工具。
从父级继承的方法更集中,它们在严格定义的范围内提供重用。它们是一个你不可能需要的函数,它不会执行它打算处理的特定任务组。
使用Trait你不会做错任何事,但如果你问自己“我会在授权用户的特定模型功能之外使用isThrottled()”并且答案是“否”那么它就是可能有点抽象太过分了!在可以提供给未来开发人员(或未来的开发人员)的可维护性和上下文方面,我不会牺牲在与其相关的代码中间使用该功能。
答案 1 :(得分:0)
这完全取决于项目,代码风格,当然还有基础设施。
就个人而言,我倾向于使用Traits或界面,显然当我觉得可以添加或更改其他元素时使用的界面,我需要确保(强制)我的共享功能应用领域,没有严格限制功能如何工作或产生什么。
当我想减少代码重复时使用Trait,例如在您的实例中。但是,这取决于该方法是否将在您将使用它的所有类中具有完全相同的行为,输入和返回值。
老实说,从来没有一种解决方案是正确的方法,而且方法是错误的,但在这种特殊情况下,我会使用Trait。
希望有所帮助:)