在 OOP PHP 框架中处理“实用程序”函数的最佳方法是什么?现在,我们只有一个文件,其中包含整个系统所需的几个功能。(例如,一个distribute()
函数接受一个值和一个数组,并返回一个数组,该数组的值以与输入数组相同的比例和相同的键分布。)
我一直觉得使用它很“脏”,因为它根本不是面向对象的。将这些作为静态方法移动到各种类中是更好的做法,还是只是一种语义解决方法?还是在框架中存在一个级别,其中某些内容将落在 OOP 结构之外?
我倾向于创建一个Util()
只包含静态方法、没有属性且不继承自的类。本质上,它充当了一堆实用函数的“命名空间”。我会允许这个类的规模扩大,但如果很明显这些方法只设计用于处理某些类型的数据,或者如果很明显一组相关的方法应该是与一些属性一起分组到一个类中。
我认为偏离纯粹的 OOP 实践是完全可以的,只要偏离的代码组织良好并且不会在您的系统中产生使其更难理解和维护的架构缺陷。
对于这类问题,我一直比较务实。
如果你想完全使用 OOP,你显然应该把它们放到类中。然而,这些类只是容器类,因为它们并不真正代表任何类型的对象。
另外:使用类将要求您拥有该类的实例,使用单例模式或将每个函数声明为静态。第一个比较慢(好吧,可能没那么多,但是在一个大型框架中,这样的事情也会变得很大——尤其是在 PHP 等解释型语言中),而第二个和第三个只是毫无用处,只是一个 OOP 包装器对于一组功能(尤其是第三种方法)。
编辑:随时证明我错了。我可能是。我不是太有经验,总是这么看,但我可能错了。
我一直认为实用程序函数是标准 php 函数的扩展。它们不是面向对象的,因为使它们成为 OO 并没有真正获得任何好处。