面向对象的编程与程序编程 - 有什么大的区别?

时间:2011-12-24 14:32:00

标签: php oop function logic

  

可能重复:
  OOP vs Functional Programming vs Procedural

最近我已经了解了OO方法,到目前为止我一直在使用函数编写PHP。

现在,老实说,我真的不明白: 当我使用'Function'的想法时,我只包含一个名为的函数,例如,functions.php,它包含我需要的所有函数,包括vars,当我需要使用那段代码时,我只需要调用它设置变量,如果有默认变量,则保留为空。

现在据我所知OO,我没有编写很多没有'类别'的函数,而是将它们聚集在一个'类'中(例如,使用db的所有函数都在'db'下'class) - 而不是给他们vars,我在课堂上预先声明了那些vars。

所以,感觉就像我基本上做同样的事情。我知道这些变量在OOP中不是全局变量,并且它们是每个实例,这对于制作更易理解的代码是可以的,但除此之外,我不能真正感受到这样做的重大区别:

$html = new html();
$html->src='http://stackoverflow.com';
$html->desc='Great place to learn & share knowledge';
$html->link();

-

html_link('http://stackoverflow.com','Great place to learn & share knowledge');

我同意对于那些没有编写代码的人来说可能更具可读性,但却无法看到每个人都在谈论的重大好处:重用,有组织,更快等等。

分享您的想法,也许我会理解如何从OOP中受益:)

提前致谢, 伊克。

3 个答案:

答案 0 :(得分:2)

阅读多态性。一旦你明白这一点,你就在那里。类不仅仅是函数的聚合(oo speak中的方法),类的实例封装了状态和行为。你还应该研究设计模式,以便充分实现oo范式的力量。从四人帮开始(http://en.m.wikipedia.org/wiki/Design_Patterns)和fowlers企业模式(http://martinfowler.com/articles/enterprisePatterns.html)

答案 1 :(得分:0)

OOP的基本要素是,您在一个地方(类/对象)中具有功能(方法)和数据(属性)。 当你只编写函数并使用变量时都是分开的。

警告:功能编程不是您现在所做的。有一个范例functional programming,其中诸如循环之类的结构不存在,一切都在函数中表达。

答案 2 :(得分:0)

当你所做的只是编写不保留任何上下文等的简单函数时,程序编程就容易多了。

一旦你想使用具有完全相同参数的两个函数,使用对象要容易得多,因为它需要的代码更少。

以下示例假设您有一个网站(SO),并且想要为不同的页面创建URL。您需要在一个中心位置定义“基本位置”,以避免在域更改后重新编写所有页面。

$url = new URL('http://stackoverflow.com');
echo $url -> link('home'); // http://stackoverflow.com/home
echo $url -> link('review'); // http://stackoverflow.com/review

使用函数执行此操作:

echo linkURL('http://stackoverflow.com', 'home');
echo linkURL('http://stackoverflow.com', 'review');

如您所见,您可能甚至不愿意使用功能。

然后就是这样的前OO方法:

$context = prepareURL('http://stackoverflow.com'); // returns <something>
echo createURL($context, 'home');
echo createURL($context, 'review');

此方法在仍具有上下文的同时使用函数。但是,正如您可能已经注意到的那样,这与OO非常接近。