PHP面向对象?

avo*_*rma 39 php oop cakephp class

PHP是面向对象的语言吗?如果没有,那么CakePHP的框架呢?它是PHP的面向对象的MVC实现吗?

另外,使用完全构建的PHP应用程序是否可以称为面向对象

ter*_*ško 95

不,PHP不是完全面向对象的语言.

而且,无论是C++或Java,因为它们都有基本类型(和PHP也有像功能的巨大集合str_replace()is_*(),这显然是程序性的).我所知道的只有纯面向对象的语言是Ruby和Scala(人们可以说后者更多的是针对函数式编程范式).

PHP可以称之为"具有对象能力的语言".

至于用PHP编写的代码,你必须明白,只是因为你正在使用类,它不会使它成为OOP.特别是如果您的代码主要基于静态类.

那么,如果你问:"CakePHP是OO框架吗?",那么答案是 - .最讨人喜欢的描述是"面向类的编程".代码库充满了静态方法和变量,其中类更像是命名空间.基本上CakePHP是一个程序代码,包含在语法中,表面上模仿了面向对象的代码.

  • +100只是因为你正在使用类,它不会使它成为OOP`,我从未见过"OOP"PHP代码,它不仅仅是使用类作为美化名称空间.更多人需要意识到这一点! (29认同)
  • 您正在将OO放置在云上,并对穿着OO奖章的内容提出了非常严格的要求."嗯,这段代码正在使用对象..但它不是面向对象的.不." 寒意. (12认同)
  • @bobobobo不是你在面向对象编程中混淆了面向对象的语言吗?一个是语言结构,另一个是编程的范例.您可以使用没有类的语言(如-javascript)来遵循OOP范例.你甚至可以在没有对象的语言中做完全精细的OOP(比如在Asm或Erlang或ANSI C中).PHP作为语言**不是面向对象的**.这并不意味着你不能在其中使用OOP.地狱..你可以和Java一样使用它.寒冷`= P` (7认同)
  • @Esailija你的第一个参数是关于应用程序的结构.大多数时候你只需要一个实例的事实并不意味着它不是OOP.这取决于应用程序结构,并且与Ruby没有什么不同.例如,如果您有网上商店,那么产品列表可能会转换为产品实例列表. (4认同)
  • 看起来如果你能够做某些事情:创建"类"和"继承"即使你必须一起破解它,这意味着你可以使用面向对象概念的程序...这真的是最终目标; 创建健壮且高效的代码,而不是重复使用,并使其尽可能简单,以便在添加复杂性时进行更新.无论它是否强迫你将自己约束到对象,关键在于它是否允许你创建像环境这样的对象. (2认同)

Gol*_*rol 40

是的,最新版本的PHP是面向对象的.也就是说,您可以自己编写类,使用继承,并且在适当的情况下,内置功能也构建在对象中(如MySQL功能).

但是仍然存在许多松散的函数,因此对于面向对象的PHP如何存在分歧.我觉得是这样的.是的CakePHP是一个面向对象的框架.

  • 更新你的问题?http://michaelkimsal.com/blog/php-is-not-object-oriented/我想看看你的想法. (3认同)
  • 这不是我的问题,但这是我的答案,我不会更新.:)但是这是我的评论:我认为这完全是关于语义,关于面向对象的定义.如果你说语言中的所有内容都应该是一个对象,你可以称之为面向对象,那么PHP就不是一种OO语言.但是对于我和许多其他人来说,只有"OO语言,是一种允许面向对象编程的语言"才有意义.OO的基本概念通常被认为是动态调度,抽象,继承和封装.PHP实现了所有这些,还有更多. (2认同)
  • 是.我的意思是你的答案(错误)=)语义很重要,并且在语义上是正确的,你需要选择正确的单词,以便可以无歧义地跟踪逻辑.PHP语言本身不是面向对象的.Ruby语言是面向对象的,Java也是如此,除了原始类型.PHP是一种能够创建对象的混合语言,Delphi也是如此.混合语言和面向对象语言之间存在很大的语义差异.它不是创建对象的能力,而是语言本身不是面向对象的事实. (2认同)