我可以从哪个开放源代码PHP项目中学习“完美的” OOP设计?[关闭]


9

我是OOP的新手,以身作则,我学得最好。

您可以说这个问题类似于我应该学习哪个Scala开源项目以学习最佳编码实践 -但使用PHP。

我曾经听说过Symfony具有最佳的“架构”(我不会假装我确切地知道这是什么意思),还有教义ORM。花数月时间阅读这些项目的源代码,试图推断出所使用的模式并学习新的技巧是否值得?

我看到相同数量的网页在分解和喜欢Zend的代码库(如果认为必要,将提供链接)。

您是否知道任何其他项目会使资深OOP开发人员流下喜悦的眼泪?

请让我补充一点,在这里根本不关心实用性和使用范围-我只想这样做:

  • 选择一个开发人员认为比我更好,更强大的代码库的项目。
  • 编写实现项目功能的代码。
  • 比较结果并尝试了解我不知道的内容。

基本上是学术兴趣代码库。有什么建议吗?


4
我不是专家,但是我认为OOP在PHP中并不常见,也不一定受到鼓励。
asfallows 2012年

3
@asfallows确实是这种情况-但是随着PHP 5.3的发布,情况正在发生变化,并且倾向于使用该语言提供的所有面向OOP编码的全新功能。
Aditya MP

3
没有“完美的OOP设计”之类的东西。
罗伯特·哈维

1
我看到您已经是Code Review Stack Exchange的成员。广泛使用它,它是学习时最有价值的Stack Exchange,我们很乐意在学习OOP的同时查看和讨论您将要编写的代码...
yannis 2012年

1
@Arkh Harsh。让我们尝试避免人身攻击。如果您不同意asfallows,请花点时间写一个写得很好的评论。

Answers:


2

Symfony 2可能是最好的大型项目,但规模很大。

我最近找到了一个名为Phrozn(静态站点生成器)的精巧,小型开源PHP项目。它的代码库相对较小,因此您可以快速检查它。

更新:

Phrozn是现代的(使用PHP 5.3+并高度依赖它),它是可扩展的,具有严格的代码覆盖率。它还重用了其他写得很好的项目中的代码,例如Symfony(YAML),Zend(Autoloader),PEAR和Twig。

OOP,使用名称空间,并且有很好的文档记录。我并不是说它是完美的,也不是可以与Symfony这样的项目进行比较,但值得一试。


1
您能给我们更多有关Phrozn代码库的细节吗?除了大小之外,还有什么使它成为学习的理想选择?
yannis'4

1
@YannisRizos :)可以在github上找到代码,因此您可以快速看一下。github.com/farazdagi/phrozn
Christian P

17

好吧,我个人想说一下Symfony2。这几乎是我所见过的最好的端到端大型项目。这并不是说它没有不好的部分,但总的来说,这是相当不错的。

现在,Zend在中间。如果您查看公共API,那将是非常不错的。它有一些WTF部分,但大部分情况下都没问题。如果您开始深入研究它,将会发现更多的WTF代码...

至于要避免的事情:

  • CodeIgniter-Fubar MVC模型
  • Kohana-大量的静电
  • Cake-PHP 4对象语义
  • Drupal-完全不面向对象
  • WordPress-完全不面向对象

至于其余的,您会发现它很受欢迎。所有设计都有好坏部分。看看Lithium,它有一些非常酷的设计概念。但是,它也有很多有用的重定向和黑客手段才能使它们起作用。

那就是要带到银行的东西。没有完美的设计,不要试图找到一个。相反,请查看其中的许多内容并自己决定。尝试每个,尝试打破它们。尝试通过阅读来理解它们(这是对理智设计的很好的测试)...

只是我个人的看法...


2
为symfony2 +1,但更重要的是,围绕它的整个社区。ZF2也可能值得一提,尽管它们似乎使事情更加抽象。
Adrian Schneider 2012年

1
也为symfony2 +1。它有一个非常扎实的代码库,它使用了许多其他语言和框架的最佳实践,拥有一个强大的社区,核心开发人员是乐于助人且可及的人员。尽管开发过程中一直在进行重构以使它们变得更好,但是当前状态已准备就绪,可以投入生产。Symfony的创建者Fabien Potencier,有一系列博客文章(fabien.potencier.org),内容涉及用Symfony组件创建框架。这是一个很好的起点,因为他写了这篇文章来帮助人们学习知识。
Hakan Deryal '04年

阅读symfony2源代码实际上是一种启发,但又不难掌握。但是,它不是TDD开发的,这可能是“完美” OOP“设计”的基石-因为没有完美的设计意味着您需要对其进行更改并需要测试。
hakre'4

2
好吧,您不能认真地将Symfony,Zend或Kohana与Wordpress和Drupal进行比较。
Daniel Ribeiro '04

谢谢!我已经下载了Symfony,我将开始了解它。感谢您证实我对CodeIgniter的担心:我曾经在SilverStripe IRC上听到“ CodeIgniter是一个初学者的OOP框架,并且犯了很多初学者的错误”,他们开始使用PHP4编写代码,但是没有时间进行广泛的重构。我怀疑他们是否使用了该语言提供的所有出色功能。请注意,我不是在丢弃CI!我喜欢这个框架,而天堂知道因为我使用了它,所以让我更轻松地完成了许多项目。但是出于学习目的,可能不是最好的。
Aditya MP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.