【问题标题】:PHP vs OO PHP - Which one to use? [closed]PHP vs OO PHP - 使用哪一个? [关闭]
【发布时间】:2011-03-15 01:12:51
【问题描述】:

我正在使用常规 PHP 开发一个 Web 系统。这是我第一次使用 PHP,所以代码既不清晰也不干净。它将一些 HTML 代码与 PHP 混合在一起。 我会说我已经完成了一半的代码。

面向对象的 PHP 的真正优势是什么? 该网站是关于书籍和书籍作者的,使用 MySQL 和 Apache。所以这不是一个很复杂的网站。

【问题讨论】:

  • 在你的代码中组织和不组织之间的区别确实更大。你想要组织。筛选杂乱无章的代码令人头疼的是你不想处理的巨大时间槽。OO 增加了代码的寿命和可重用性。创建一个书籍类,将属性作为变量添加到其中,并享受必须处理一个包含您需要的所有数据的合并对象的好处(相对于一堆不连贯的数组或任何其他可能用于跟踪的方式)书籍)。这个网站是你的朋友:php.net/manual/en/book.classobj.php
  • 我删除了 'comparsion' 和 'language-comparison' 标签,因为您并不是真正要求比较 PHP 和其他语言:您是在询问 PHP 以及是否使用对象系统。

标签: php oop


【解决方案1】:

面向对象的真正优势:您的代码组织得更好,更容易维护,更模块化(因此更容易重用),并且可能不那么脆弱(因为封装了状态和实现,并且希望有更好的安全性)。 (我的愤世嫉俗者还说,如果你学习了面向对象的 PHP,你就迈出了重要的第一步,离开了PHP ghetto。呵呵。为我工作!)

已经有很多 PHPers 在 Stack Overflow 上进入 OO 的问题:

更不用说那里有数以万计的 PHP 面向对象教程。我的看法:基本上,是的,如果您正在编写 PHP,那么您可能应该为最琐碎的应用程序之外的任何事情编写面向对象的 PHP。有许多类似 Rails 的 PHP 框架可以让您的生活更轻松,并可能帮助您成为更好的程序员。

【讨论】:

  • +1:我同意你的看法!我只想补充一点,PHP 确实将对象的状态保持在一个页面到另一个页面,因此您可能希望将数据保存在 $_SESSION 数组中。
【解决方案2】:

面向对象的 PHP 在与 PHP 代码混合的 HTML 代码量方面与程序风格没有区别。因此,如果您唯一关心的是混合,您应该寻找其他方法来清理您的代码。例如,您可以为动态内容创建带有占位符的 html 模板文件,并使用 file_get_contents 和 str_replace 在运行时注入动态内容。

【讨论】:

  • 但是,使用非 OO 时,与 HTML 混合的 PHP 代码量会显着增加。
  • @thetaiko:不一定。举个例子证明我错了,我会用重写程序版本来回答你的挑战。
  • 无论您使用的是 OOP 还是过程 PHP,如果您将 HTML(表示)与您的业务逻辑混合在一起,您就会陷入混乱。任何网络开发人员都可以告诉你。更多地使用表示端作为模板,就像 JSP 如何执行它一样。
【解决方案3】:

在我看来,我们 PHPer 可以彻底抛弃 Object(类实例)的概念,我们只需要 Array 和 Mode Class:

初始模式下的所有数组都支持任何数组函数作为其方法:

<?php
$array1->array_flip(this);
?>

使用“->mode()”验证最小数据集,然后切换模式类:

<?php
$array1->mode('class1', $success);
?>

任何模式类都没有“->construct()”,但有“->validate()”来验证最小数据集。

一个模式下的数组仍然可以使用数组函数作为它的方法,但是在使用它们中的任何一个后,数组将被切换回基本数组模式, 我们需要使用“->mode('class1', $success);”切换回模式。

这里的激进思想是以数据为中心的编程;我们需要将数据(数组)和活动(类方法)分开。

我们可以修改 PHP 引擎,去掉部分 OO(面向对象),并支持 Mode Class。我们可以称之为 MyPHP。

例如: $array_man1 可以设置成两种模式:cls_normal_man 和 cls_crazy_man:

<?php
$array_man1->mode('cls_normal_man')->normal_method1()->mode('cls_crazy_man')->crazy_method1();
?>

【讨论】:

    【解决方案4】:

    如果你真的想使用 oo 编程去 Ruby。

    OO PHP 对我来说是假的。如果你已经用结构化 php 完成了一半的代码,请不要改变主意。

    只要记住使用大量 cmets 使代码干净,以便您将来可以轻松更改某事

    【讨论】:

    • 有人应该告诉 facebook。还有禅。还有梨。和 SPL 的维护者。有数百万行高质量的面向对象的 PHP 代码,不管你个人感觉如何。
    • 我不是说oo php没有好工具。我只是说 PHP 从来都不是真正的 OO 编程语言。
    • @Dobiatowski 那又怎样?现在是面向对象的。当然,这不是我最喜欢的 OOP 实现,但它工作得很好。
    • @Alerty 当然,这就是 HTTP 应该以无状态方式工作的方式。在此之上抛出 cookie 违背了 HTTP 所归属的 REST 范式。序列化对象以在页面之间传递也是如此。但是,这与 PHP 中的 OOP 无关。 :)
    • @Alerty 这个问题与 PHP 或 OOP 无关,HTTP 就是这样。您会发现 JSP 和 ASP 等其他所有服务器端技术也是无状态的。为什么序列化对象会破坏 OOP?之前是对象,之后还是对象。
    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 2013-08-30
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多