3

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

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

我读过我应该将它们转换为匿名类,并像这样引用它们:

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

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

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

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

4

3 回答 3

3

我读过我应该将这些(通用函数)转换为匿名类......

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

相反,使用命名空间来组织你的功能代码:

namespace Utils;

function foo() { }

function bar() { }

然后,使用它:

require 'Utils.php';

use Utils\bar;

Utils\foo();
bar();

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

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

于 2013-07-02T08:29:47.230 回答
2

我的回答:取决于. 有时最好只声明函数,有时只声明类。

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

Java中的一个很好的例子:

class Math包含大量与数学相关的有用函数。我们对课堂了解多少?它的静态方法很可能会接受numeric parameters并返回numeric values/ boolean values

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

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

此外,编码可能真的很舒服,因为一些 IDE 可能会在您开始编写时快速列出该类包含的所有静态函数Math.

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

于 2013-07-02T08:32:24.390 回答
1

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

一个对象封装了它在被调用时隐式引用的状态信息,这本质上与调用一个函数并给它一个结构来操作相同。

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

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

于 2013-07-02T08:39:57.920 回答