声明:我还没有处理过的,而PHP的,所以我的语法可能是错误的。
术语OOP有点模糊imo,这意味着不同的人在听到它时会想到稍微不同的东西,所以当你听到矛盾的事情时不要混淆。
使用类一起构造类似的函数不会损害你的代码,但是你基本上只是使用类作为函数的名称空间。通常情况下,您需要以某种方式定义类,以便您的系统的某个方面进行封装,这意味着只有该类的代码才会直接处理该方面,而其他人则只使用该类。
例如,您可以有一个管理打印作业队列的类。如果您有一些想要打印文档的代码,则它不必知道作业排队或如何发送到打印机,它只需知道打印作业队列对象(我们称之为$jobQueue
),它可能有一个像$jobQueue->enqueue($document)
这样的方法。
现在你可能会说:“那代码也可以同样使用全局函数enqueueJob($document)
,”直到你想有一个以上的队列(对于不同的打印机)是真的,并以不同的方式工作队列(将作业存储在数据库中,存储在内存中或根本不存在 - 想象一下直接进入回收站的队列:))。使用OOP,这种场景是没有问题的,并且这些细节完全隐藏在想要打印文档的代码中 - 所有它必须关心的是它有一个带有enqueue
方法的作业队列对象。
为了获得这种作业队列的“互换性”,他们需要有一个通用的接口(在这种情况下,这种方法是enqueue
方法),必须仔细选择它以涵盖想要打印的代码的所有需求的东西,但没有对打印队列的工作方式做太多的假设。例如,您可以想象enqueue
方法将文件路径作为参数告诉队列将文件存储到哪里 - 但该接口对于在数据库上运行的队列无用。这是找到好的抽象艺术。
现在回到你原来的问题,只要没有考虑到新类应该提供哪些抽象/接口,就把相关函数组合到一个类中,并不是真正的OOP。没有这一点,所有使用这个新类的代码将被硬连线使用,如果您决定需要不同类型的打印机队列,则需要更改/重新检查。 :)
但是,“不是OOP”是不一样的“不是一个好主意”。我说去做,重新安排你的功能。在我看来,重要的是要记住,并非每件事都需要成为一个对象或适合某种抽象。但是也许你会发现你确实有一些功能可以完成类似的功能(文件队列,数据库队列),这些功能可以抽象成一个通用接口。
如果它可以帮助你编写更好的代码,为什么不呢? – phant0m 2013-05-04 11:47:58
这不是面向对象的编程(完全),即基于调用的编程。您可能想了解[实用模式](http://c2.com/cgi/wiki?UtilityPattern)并查看[实用程序类是邪恶的?](http://stackoverflow.com/q/3340032/367456) - 请记住,不同的编程语言有不同的需求。在PHP中,您应该了解静态和动态方法调用的不同之处。 – hakre 2013-05-04 12:01:24
如果你想采用这种方法,只需获得一本[关于重构的好书](http://martinfowler.com/books/refactoring.html),并应用你学到的东西。你最终会写出更好的代码。 – Yoshi 2013-05-04 12:09:44