2011-12-24 57 views
4

可能重复:
OOP vs Functional Programming vs Procedural面向对象编程与程序编程 - 最大的区别是什么?

最近我一直被引入到面向对象方法,到目前为止,我一直在使用功能一直在写PHP。

现在,说实话,我并没有真正明白它: 当我使用“函数”的想法时,我只包含一个名为例如functions.php的文件,其中包含我需要的所有函数,包括变量,当我需要使用这段代码时,我只需调用它并设置变量,如果有默认变量,则将其保留为空。

现在据我所知,OO不是写很多没有'category'的函数,而是把它们聚集在一个'class'中(例如,所有使用db的函数都在' db'class) - 而不是给他们增加变数,我在班上宣布这些变数。

所以,感觉就像我基本上做同样的事情。我知道瓦尔不是全局的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

您不需要意思是“功能性”,你的意思是“程序性”。功能是相当不同的(想想Lisp)。 – 2011-12-24 14:35:26

+0

如果你问我,PHP的“面向对象”支持很大程度上是作为一种事后的追求。如果您觉得它有用,请使用它,但是当语言的某些方面感觉人为的,没有想到的或简单的莫名其妙时,请不要感到惊讶。 – 2011-12-24 14:36:05

+2

如果您只是使用类作为名称空间来分组函数,那么它不是真正的OOP。 – JohnP 2011-12-24 14:36:21

回答

0

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

注意:函数式编程不是您现在所做的。有一个范例functional programming其中诸如循环的结构不存在,并且所有内容都在函数中表示。

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非常接近。

2

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