我正在用PHP构建一个MVC应用程序,我正在创建一个Form类来生成一个可以添加元素的表单。我应该使用静态方法来生成表单,例如Form::generate(...)
,或者在我声明要在视图文件中使用的变量的视图类中,我应该实例化类并像$form->generate(...)
一样使用它吗?我听说使用静态方法是不好的,因为测试,但我不知道。谢谢!
答案 0 :(得分:2)
除了PHPUnit不支持静态模拟的问题之外,更明显的问题是松耦合和依赖注入。如果您有与状态无关的方法,那就完全没问题,但是使用static
关键字严格定义这些方法会在双冒号运算符后面的类名上创建硬依赖关系。 (事实上,正是因为硬依赖会使PHPUnit问题变得如此棘手。)
答案 1 :(得分:-1)
我同意静态方法已经不再受欢迎,除非在某些应用中,例如:
我首先创建一个表示表单的Form类,如果需要,添加一个工厂助手来生成表单实例。
您可能想看看Symfony表单构建器,他们的方法很优雅: http://symfony.com/doc/current/book/forms.html#building-the-form
答案 2 :(得分:-2)
这取决于,通常静态方法不会维持状态,换句话说,您不能在该类中使用动态属性,或者实例化该类(显然)。
如果你使用它们作为OOP执行功能的方式应该没问题,事实上我认为Laravel使用了很多它们。