我知道有关OOP和程序之间存在差异的无数问题,何时使用以及利益是否超过额外开销,学习语法,继承混淆等等。我发现的大部分内容都倾向于讨论差异和利益,而不是它是否必要。
我通常根据我正在做的事情在同一站点脚本中混合OOP和程序。我仍然是OOP的新手,实际上非常喜欢OOP的模块化特性及其带来的好处,即使有轻微的开销。有时候继承可能会有点混乱!
对我来说,主要的好处似乎只是更好地组织和保护代码。其中,开发人员或开发团队是唯一欣赏它的人。我想有一个部署速度的情况,但不会说大多数网站都有很多,除非你继承了别人的鸟类:)
在大多数PHP应用程序中是否需要OOP,特别是当执行速度是大多数网站的圣杯时?好的,所以毫秒的开销不会真正注意到,除非一个繁重的使用网站,但作为电子音乐速度的粉丝是王!
我在游戏和实时云软件等复杂的东西中使用OOP,但静态网站?即使数据库很重?
有没有人拥有从OOP中受益的典型网站的真实世界示例?为什么?
假设这两个案例结构合理,那么大量使用ebay或monster.co.uk等网站会从OOP或程序()的速度提升中获益更多吗?为什么?
至少在程序方面,您可以从上到下进行调试,而无需在脚本周围跳转来检查类和扩展和接口。
我不能只使用清晰的MVC和评论良好的代码来应用OOP模块化思维吗?
例如,我将包含文件和组相关功能中的可重用功能放在一起。我所要做的就是像文件一样包含文件并调用函数。如果函数需要更改,它只会在一个地方更改,类似于类。
在程序中已经存在一种继承,而不必通过箍来声明它。您没有相同级别的控制权,但它可以很好地快速完成工作。
您甚至可以通过对父函数中的函数进行分组来模拟一个类,并使用选择器函数来访问它们。这有点远了!
另外,据我所知,当一个函数被调用时,它会停留在内存中,从而使后续使用更快。而使用OOP,您必须创建各种方法的两个对象,以便为两个不同的变量使用相同的函数。如果我错了,请纠正我。
为什么创建一个对象并使用一种方法来“获取”一个值,当我可以直接用过程引用该值时?
为了实现这一目标做得很好,没有意识到我输入了这么多。无论如何,在我离开之前,我将在这里结束它。因此,如果您有任何实际网站或部分网站受益于OOP或程序的良好示例,我将非常感谢清晰度。
答案 0 :(得分:9)
在OO语言开始流行之前,人们设法编写好的,清晰的,组织良好的代码。我认为没有理由说现在还没有完成。
一般来说,OO原则使得它更容易(这是OO如此受欢迎的一个原因)但它们绝不是必需品。
答案 1 :(得分:3)
这里有很多问题。我记得在大学期间写了一篇长篇文章来解决其中的一些问题,但我不想在这里重现类似的东西,所以相反,让我分享一些想法:
在大多数PHP应用程序中是否需要OOP,特别是当执行速度是大多数网站的圣杯时?好的,所以毫秒开销不会真正注意到,除非一个繁重的使用网站,但作为电子音乐速度的粉丝是王道!
我认为如果执行速度对您来说非常重要,那么php不适合您的网站。与使用解释语言的大量性能成本相比,与用于创建大型系统的OOP编程风格的优点相比,一点点开销是可以忽略的。不要忽视让程序员轻松做事的重要性,因为这意味着更快的发布,更少的错误和更易于维护的代码。
我在游戏和实时云软件等复杂的东西中使用OOP,但静态网站?即使数据库很重?
我同意你的意见。网站的一个好处是它们自然是模块化的,因为它们被分成页面。很难编写如此糟糕的代码以至于未来的程序员无法维护它(对于一个相当简单的静态网站)。
例如,我将包含文件和组相关功能中的可重用功能放在一起。我所要做的就是像文件一样包含文件并调用函数。如果函数需要更改,它只会在一个地方更改,类似于类。
你可以编写好的程序代码,但比编写好的OOP代码更难。在给予OOP系统的情况下,较弱的程序员不太可能编写疯狂的spagetti代码。
为什么创建一个对象并使用一种方法来“获取”一个值,当我可以直接用过程引用该值时?
这是您唯一真正的实施问题。使用Getters / Setters的想法是,您可以更改类的内部工作方式,而不会破坏依赖于它的其他代码。
答案 2 :(得分:2)
我在游戏和实时云软件等复杂的东西中使用OOP,但静态网站?即使数据库很重?
暗示你不想在游戏中加速,但想在网站上加速。
PHP绝不是瓶颈,如果是,请用C语言写。
不要编写程序代码,因为它“更快”。那太傻了。
有没有人拥有从OOP中受益的典型网站的真实世界示例?为什么?
网站受益于可维护且组织良好的模块化代码。
您不需要OO,您可以使用功能或命令式样式。然而,PHP以程序风格编写错误代码很容易。
我个人会说,如果它是OO,你的代码更有可能是模块化的,可维护的。
虽然没有必要。
在程序中已经存在一种继承,而不必通过箍来声明它。您没有相同级别的控制权,但它可以很好地快速完成工作。
在OO编程中,它完全是关于封装,这意味着将一块数据绑定到一些操作它的函数。
您也可以使用一组函数来执行此操作,这些函数将数据对象作为第一个或多个类。
Classes和OO只为您提供糖和实用程序。
这是编写模块化代码的工具,如果它可以帮助您使用它。
不要预先成熟地优化OO,因为它“慢”。如果您关心那种微优化,那么就开始编写C或ASM。
答案 3 :(得分:1)
我认为很多推广OO的人都比较年轻,并且只是写过/被教过OO,所以对程序性的看法是老式的和“遗产”。
IMO很容易编写DRY的模块化程序PHP,并且可以轻松维护。诀窍是使用函数和'include'分别重用标准的php和html。在一天结束时,PHP只是阅读数据库并生成html - 如果你不愿意,没有特别需要添加额外的OO复杂性。