是有用函数的集合,最好作为函数库保存,或者应该将其转换为类


Is a collection of useful functions best kept as a function library or should it be converted to a class?

我正在对我的一些网站进行现代化改造。旧的数据库访问例程现在与页面呈现例程等一起安全地封装在类中。

但是,我只剩下一些有用的通用函数,它们都愉快地驻留在一个php文件中。

我已经读到我应该将这些转换为一个匿名类,并像这样引用它们:

$output1 = myfuncs::function1(...);
$output2 = myfuncs::function2(...);

现在,我明白了,如果我应该使用别人的代码,这样做是有意义的,以防止重复的函数名,但我应该这样做,而不是坚持使用函数库,还有其他原因吗?首先,函数库会更快。我知道这在当今时代是相当不重要的,但我认为以下代码看起来也不那么笨重:

$output1 = function1(...);
$output2 = function2(...);

我并不反对oop本身,我喜欢我用于数据访问和渲染的新类,但真的有必要让一切都是oop吗?

我已经读到我应该将这些(泛型函数)转换为一个匿名类。。。

不要那样做。这被认为是(最糟糕的一种)面向类的编程,因为除了作为函数的包装器之外,它们没有其他用途。

相反,使用名称空间来组织您的函数代码:

namespace Utils;
function foo() { }
function bar() { }

然后,使用它:

require 'Utils.php';
use Utils'bar;
Utils'foo();
bar();

但真的有必要让一切都变成oop吗?

没有。PHP允许你混合和匹配,所以做任何你觉得舒服的事情。

我的答案:取决于。有时只声明函数更好,有时只声明类。

我的观点是,您的代码必须可读可重用

Java中的一个很好的例子:

class Math包含许多有用的函数,这些函数在某种程度上与数学有关。我们对这个班了解多少?它的静态方法很可能接受numeric parameters并返回numeric values/boolean values

Math.abs()
Math.cos()
Math.sin()
Math.sqrt()

等等。只是一套完美的工具。类可能是一个很好的工具箱。

此外,编码可能非常方便,因为当您开始编写Math. 时,一些IDE可能会快速列出该类包含的所有静态函数

当声明一个类而不仅仅是简单的函数时,您可以跟踪/记录它们在类中的使用情况,并共享一些实例变量。

这个问题的答案只有哲学上的区别,计算机对你给它指令的方式漠不关心。

对象在被调用时会隐式引用状态信息,这本质上与调用函数并为其提供一个可操作的结构相同。

将函数范式代码转换为面向对象代码唯一有用的时间是,如果你能想象一个时间,你可以创建一个提供非常相似的行为,但会改变某些行为的子类。

除此之外,类确实有助于名称空间,但如上所述,php为函数范式php提供了名称空间。