我被要求用PHP做一个项目,并确保它是面向对象的.我已经完成了OO,我已经完成了PHP,但从来没有.
OO PHP(继承/多态)之外的主要好处似乎是代码组织.没关系;我这样做.但是,如果我真的应该为每个“对象”创建实例,那么我会陷入困境.
对我来说(也许我在这里天真),一个Web应用程序就是要做出非常简短的无状态请求来改变或检索数据库中的记录.对象不能在请求之间保留.因此,从数据库加载数据,从该数据构造对象,进行小更新,将数据从对象保存回数据库,然后抛弃对象,感觉相当无意义.加载/保存代码似乎是无用的工作. [澄清:浪费开发时间,不处理时间……不太关心开销]
另一种方法是让一堆单例(或带有静态方法的类)只为数据库层提供一个漂亮的,有组织的抽象层.我想以这种方式编写代码并不会感觉真的是OO.我错过了什么或者那种风格好吗?
解决方法:
单例基本上只是全局变量,添加了一些命名空间糖.使用直接过程编程无法获得的对象和类编程有一些主要好处.一个是继承,如你所提到的.另一个是命名空间 – 您可以使用代码将批次压缩为单个包含文件(在PHP等解释语言中比在编译语言中更有意义).
对象本质上是具有共享状态的函数集合(尽管单例使其成为全局状态.请注意.)正如您所指出的那样,好处主要在于函数透明地共享该状态,而无需每次调用都明确地传递它.如果每个请求都有各种函数在共享数据上运行,并希望它们是一组通用函数的专用形式,那么OOP可能是一个很好的选择.
由于你的任务是“确保它是面向对象的”,我需要花一些时间来考虑常见的功能组,相同的概括等.
最后,对象的设置/拆卸时间也不算太差 – 如果你做得好的话,它甚至可以节省一些开发时间.