2010-07-12 57 views
9

我正在开发一个使用普通PHP的Web系统。这是我第一次使用PHP,因此代码不清晰,也不干净。它将一些HTML代码与PHP混合在一起。 我会说我已经完成了一半的代码。PHP vs OO PHP - 使用哪一个?

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

+3

这真的更多的是你的代码正在组织之间没有区别。你想组织。通过无序代码筛选令人头疼的问题是你不想处理的巨大时间问题。OO增加了代码的寿命和可重用性。制作一本书课,将属性视为变量,并享受必须处理一个整合对象的好处,该整合对象包含您需要的所有数据(与一堆断开连接的数组或其他方式保持跟踪的方式相比)的书)。这个网站是你的朋友:http://php.net/manual/en/book.classobj.php – abelito 2010-07-12 22:35:32

+0

我删除了'比较'和'语言比较'标签,因为你并不真正要求比较PHP和其他语言:你在问PHP和是否使用对象系统。 – 2010-07-12 22:46:37

回答

16

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

PHPers已经有很多问题转移到OO上堆栈溢出:

更何况是t这里有数以万计的PHP面向对象教程。我的看法:基本上,是的,如果您正在编写PHP,那么您应该可以编写面向对象的PHP,用于超出最琐碎应用程序的任何内容。有很多类似于PHP的Rails框架可以让你的生活更轻松,并且可以帮助你成为更好的程序员。

+0

+1:我同意你的看法!我只会补充一点,PHP确实将对象的状态保持为一个页面,因此您可能需要将数据保存在$ _SESSION数组中。 – Alerty 2010-07-13 00:26:00

2

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

+0

但是,使用非OO,与HTML混合的PHP代码的数量将显着增加。 – thetaiko 2010-07-12 22:40:41

+1

@thetaiko:不一定。用一个例子证明我错了,我会通过重写程序版本来回答你的挑战。 – 2010-07-12 22:52:35

+1

无论您使用的是OOP还是程序PHP,如果您将HTML(演示文稿)与业务逻辑混合在一起,那么您将陷入一个巨大的混乱局面。任何Web开发人员都可以告诉你。更多地将表示方用作模板,就像JSP强制执行它一样。 – 2010-07-13 00:50:24

-5

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

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

只记得,使代码更干净,有很多意见,所以你可以很容易地在面向对象的未来

+6

有人应该告诉Facebook。和Zend。和梨。并且是SPL的维护者。 无论您对个人感受如何,都有数以百万计的面向质量对象的PHP。 – 2010-07-12 22:43:11

+3

我不说在oo php中没有好的工具。我只是说PHP并不是真正的OO编程语言。 – 2010-07-12 22:48:43

+0

@Dobiatowski那么是什么?现在是OOP。当然,这不是我最喜欢的OOP实现,但它工作得很好。 – 2010-07-12 23:00:52

0

在我的脑海里,我们PHPers可以彻底扔掉对象(类实例)的概念,我们只需要阵列和模式类型:

初始模式支持的所有阵列的任何阵列功能的方法:

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

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

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

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

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

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

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

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

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