网站的OO或程序PHP?

时间:2010-07-16 07:01:43

标签: php oop

我即将开始我的第一个PHP项目 - 为一个小型非营利组织建立一个新网站。来自.Net和Java背景,面向对象编程对我来说非常自然,但我不确定它是否适合在PHP中建立一个中等复杂度的网站。我的理解是,大多数基于PHP的站点主要使用非OO代码编写。

对于网络应用程序我肯定会走OO路线,但对于一个相当简单的网站,我不太确定。该网站将包含大约五个部分,每个部分有一到四个内容页面,包含文章,新闻,图片库和一些表格。没有涉及复杂的交互(除了一些非常简单的Web表单,用于编写文章,注释,注册等),并且不需要维护状态(登录除外)。 MySQL将用于数据存储。

代码实际上并不需要特别可扩展 - 这不是企业网站或我们正在讨论的模板引擎 - 但对于程序员来说,代码很容易理解是很重要的。相当数量的PHP经验。我猜大多数PHP程序员都不习惯OO代码,所以也许这是支持程序代码的一点?

支持OO的一个方面是,在数据库级别,将有不同类型的文章基于包含大多数属性的超类型,当然这些文章很自然地转换为OO代码。

也许某种混合方法最好,使用对象来表示“业务对象”等,但使用传统的过程代码呈现HTML等?

评论非常感谢。 --Rolf

12 个答案:

答案 0 :(得分:11)

  

但对于具有相当数量PHP经验的程序员来说,代码相当容易理解非常重要。

代码的可读性不依赖于编程范例,而是代码的编写方式。我已经看到了我的意大利面条OOP(包括我自己)的公平份额,我看到了相同数量的程序混乱。如果代码编写得很好,那么即使没有正常数量的PHP知识的人也应该能够继续学习。

  

我猜大多数PHP程序员都不习惯OO代码,所以也许这是支持程序代码的一点?

我怀疑这一点。我去过很多会议,似乎没有人在OOP上遇到任何问题。事实上,我甚至没有看到一行程序代码。此外,所有主要框架都是完整的OOP。您将在PHP4应用程序和查看新手代码时找到程序范例。

但是要回答你的问题:如果这是你和你的开发人员所熟悉的,我会说使用OO。就个人而言,我发现View部分中的过程代码是一个坏主意,因为您可能最终会为完全不可维护的模板混合逻辑和表示代码。有关更易于维护的方法,请参阅POEAA's Web Presentation Patterns

如果你觉得它过于庞大,你就不必使用MVC。如果您愿意,请使用页面控制器。但话说回来,MVC也很难实现,并且plenty frameworks那里的工作将首当其冲。

答案 1 :(得分:3)

编写PHP时首先要接受的是它主要是一种模板语言。 PHP应放在HTML文档中,以使文档的位有效。

PHP能够实现OO设计,但是您编写的代码不会像类似的C#代码那样好(可能还有Java,但我不知道要发表评论的Java)。

你说你将有一个用于创建文章的界面 - 这听起来比在这里或那里简单地添加一些动态内容更复杂。这可能会受益于OO治疗。

另一方面,已经制作了许多PHP CMS,例如wordpressDrupalJoomla!,它们可能会满足您的需求。

总之 - 如果预先制定的解决方案不适合您,请使用一些程序脚本的OO路线将它们组合在一起。

答案 2 :(得分:2)

这完全取决于你的目标。

  • 如果您不希望稍后通过程序方法扩展您的项目,那就没问题。
  • 如果您能够使用预定义的对象更快地开发部分代码,那就可以了。

  • 如果你能不费力地从上到下写下你的代码,“程序”也可以。

答案 3 :(得分:2)

我想推荐WordPress,而不是从头开始编写相当简单的网站代码。

所有你需要的网页空间和很少的时间来学习如何自定义wp。

查看showcase

如果您仍想从头开始编写..最好遵循OO,可能您可以使用ZendKohana等框架

干杯

答案 4 :(得分:1)

程序性不可扩展的流行神话是绝对的BS。如果你真的想要一个实例,那么看看github中的linux内核开发。毫无疑问,它是世界上最复杂的项目之一,其社区从第一天起就开始了。因此,C完全结构化和程序化的事实并不限制它的可扩展性。另外,要指出OOP基本上是一个在php中模拟的概念。在最低水平,它最终趋于平缓。保持您的逻辑分离,并制作可重复使用的功能。关注用户输入并清理数据。专注于数据库设计。正如linus曾经说过“糟糕的程序员专注于代码,优秀的程序员专注于数据结构”。

答案 5 :(得分:0)

我肯定会采用OO方法。

您可以使用Zend Framework,同时运行MVC和持久性框架。或者你可以使用一些更轻量级和专业化的框架,比如doctrine for persistence,我相信(但我不确定)cakephp是非常轻量级的,对MVC有好处。

不仅可维护性增加,而且这样你也缩短了开发时间,我认为这是一种双赢的方式!

答案 6 :(得分:0)

公平地说,任何用PHP创建的网站都应该以OO方式创建。由于您还编写了.NET和Java,因此您应该知道只需在OO中编码即可使代码可维护。此外,如果您计划使用PHP创建更多网站,这是一种很好的做法。

答案 7 :(得分:0)

就我个人而言,我认为不熟悉OOP的PHP编程人员不称职和/或远远落后于时代 - 这不应该是你坚持程序化的理由,至少除非客户想要改变一点点它只对程序代码充满信心。

我认为OOP的主要优点在于它鼓励两种相当简洁的编码风格,如MVC(或类似),并鼓励编码人员使用&为常见任务构建库 - 这意味着您可以在更短的时间内获得更清晰,更易于维护的解决方案,并且可能会发现更少的未发现的错误。

答案 8 :(得分:0)

如果它是一个简单的网站,并且内容不会发生太大的变化,那么我不会对使用过程代码而不是编写完整的,面向对象的解决方案(这可能是过度杀伤)的人皱眉。例如:

<?php
switch ($_GET['filename']) {
    case "news":
        require_once('inc/news.php');      // your news functions
        include_once('tpl/news.tpl.php');  // your news template
    break;
    case "events":
        require_once('inc/events.php');
        include_once('tpl/events.tpl.php');
    break;
    case "contact":
        require_once('inc/contact.php');
        include_once('tpl/contact.tpl.php');
    break;
    default:
        if ($_GET['filename']=="") {
            include_once('tpl/home.tpl.php');
        }
        else {
            include_once('tpl/page_not_found.tpl.php');
        }
    break;
}
?>

上面,在一个名为index.php的文件中,它将充当一个简单的控制器。对于小规模的网站,我使用类似的 - 尽管稍微复杂一点的设置。我通常在inc目录中的文件中有“业务登录”(例如inc/news.php将包含一个类,其中包含用于获取新闻文章的方法等),然后是tpl中的模板文件。目录

不是以对象为导向,也不是坏事。它让我感到沮丧,那些会发誓失明的人,如果它不是面向对象的,那么它一定是坏代码。

答案 9 :(得分:0)

网络是过程。

它只是输入,过程和输出。

在Web应用程序中使用OO是错误的,并且浪费了劳动力。 OO比程序更复杂,并且在任何Web应用程序中都增加了复杂性。

在PHP中忘记OO,因为PHP在程序上像网络一样。

仅使用过程就可以将您的项目组织为层次结构,并将业务规则放入数据库中的存储过程中。

答案 10 :(得分:-1)

我会跟oop一起去。它会更容易,你可以重写更少的代码,以防你有机会:)

答案 11 :(得分:-1)

绝对与OO合作。

您的网站有多小,可以使用OO更好地修改/扩展。

我也可以推荐一个非常好的和快速的框架:

http://www.yiiframework.com/

完全在PHP5和OO中:)