2010-11-01 173 views
10

上课很有用,但是当我在写课程的时候,我总是把它想成我的剧本上的一块沉重的摇滚。我觉得班级应该很少使用。但与此同时,我们都对OOP范式心怀疑虑。我们什么时候应该上课,什么时候不应该上课

脚本从来没有免费的功能?我是否应该使用千类来使脚本更加干净?那么表演呢? class::method()是否需要更多的时间才能获得简单的function()? OOP的真正含义是什么?我有点困惑。

因为我发现OOP,我看不到随机函数。我很痴迷。我看不到没有父类的函数。我宁愿用一种方法创建一个类,然后单独看到这个函数。这样对吗?那里有纯粹的OOP CMSes的例子吗?

+0

什么是“随机函数”? – Svisstack 2010-11-01 12:08:57

+0

** [函数.php vs OOP]的可能重复(http://stackoverflow.com/questions/2392795/functions-php-vs-oop)和[什么是类的点](http://stackoverflow.com/questions/1993638/classes-whats-the-point)** - 总结:你要么使用OOP要么你不要。 – Gordon 2010-11-01 12:12:27

+1

我认为“Utilities”/“Helpers”类在大多数OO项目中都是标准的:P。 – Matt 2010-11-01 12:18:58

回答

6

在我看来,PHP中程序员最重要的事情,除了他的经验之外,他的工具包。也就是说,自古以来他就已经写出了自己的代码。

对于我来说,在这种情况下,OOP的优势非常明显。拥有一个你知道的类将总是通过简单的方法预处理你自己和团队成员的要求,然后通过调用大量的静态函数。虽然你可以争论一个包含satic功能的图书馆服务于同样的目的,但在我看来,课程更容易阅读和理解。举例来说,在我的自定义会话类的程序员可以看看我的代码,看看,

$my_session = new session(); 
$my_session->start(); 

if (($session_errno = $my_session->error()) !== FALSE) 
{ 
    //DO SOMETHING BECAUSE OF A SESSION ERROR 
} 

和容易理解,在这个应用会话通过我们的自定义会话类处理,并且应该返回某种类型的成功/失败的没有检查过图书馆/班级。同时,呼叫像这样,

session_start(); 

if (session_error()) 
{ 
    //DO SOMETHING BECAUSE OF A SESSION ERROR 
} 

不说清楚,session_start()不是默认的PHP会话处理程序,但它会调用哪个被列入全球包括一些大型列表session_set_save_handler()定义的函数这可能不容易在大型应用程序中找到。它也不那么清楚,session_error()是一个返回由自定义会话处理程序设置的错误的函数,它可以主动在已经生成的会话中查找会话问题,并且完全独立于PHP的默认会话。

这不是一个很好的例子,但我认为它是一个很好的例子。我没有详细讨论保护整个应用程序的数据,继承以及使OOP有用的所有其他内容。

但很快,想象一个访问应用程序的MYSQL数据库的类。花费大量的时间来设计类以使用准备好的语句,记录错误并根据需要为程序员提供适当的逻辑。通过简单地调用该类的公共“数据访问”函数,而不必担心致命错误,错误逻辑或危险SQL(注入等),团队可以更少担心数据库访问问题。

这一切都可以用静态函数完成,就像你所建议的那样,但是静态库中的每个函数都作为一个整体暴露给应用程序,而只有public和'SAFE'函数暴露给使用数据库的应用程序访问对象。程序员不会意外地调用一个危险的函数,如果没有被其他函数正确初始化可能会导致重大问题,程序员也不能像使用一系列静态函数和全局变量一样有意地抑制类错误或其他受到类保护的数据。

虽然一个好的应用程序可以在没有任何对象的情况下进行设计,但一个好的程序员应该在适当的时候享受对象所提供的可用性,可扩展性和保护。

我会留下我最后的隐喻。对象就像工厂内的专用机器和工具。虽然工厂本身在其装配线上有许多这些独特的工具,但从简单的弯曲制动器到数控机床和自动化机器人,它们只是帮助更多众多劳动者和管理者的团队中的一小部分,我们的静态功能,做建设一辆更好的汽车,卡车或自行车的工作。

+0

很高兴听到它。我的主要观点是将对象作为工具的概念,而不是所有现代编程都结束。 – DrPerdix 2010-11-01 13:43:20

1

我认为你有一些不好的愿景OOP编程,因为你永远不会做它。 雷神之锤3使用纯Ç没有任何阶级和OOP所著,那么这是一个证明,你可以做好事,而不使用OOP

但是,如果你想你可以使用它。 继承类在实践中具有小功能的业务逻辑编程,在框架编程中要好得多。

如果你决定编程与OOP然后写小物件的小功能,谁做的小东西,不是大非可读课长不直观的功能,那么你会在你的代码保持干净。

1

看一看这样的:

类是比变量和函数 影响这些变量 容器更容易一点,但他们 可以建立小 成分是非常有用的 - 几乎miniture程序。 区别在于你不需要 来向它们展示它们,而 它们可以很容易地插入到大多数脚本 - 只需一个要求或包含顶部的 声明。类 描述了一个'对象'。一个对象是一个 较小对象的集合,只是像一个类中的 。

Reference

0

如果你认为你的对象是大石头的,这可能是一件好事。 由于php性质不是很好(除了一些默认的扩展名),有足够的程序功能 ,大约6000,不是吗?

我鼓励你继续OOP。尽管如此,数百个课程似乎过分了。 对于初学者来说,将所有需要的东西放在一个对象中,并在适当的时候分割成子类。

0

对此没有简单的答案。

虽然一般情况下你应该坚持使用函数或面向对象的方法,与Java相比,关于PHP的好处之一就是它允许函数作为一流的实体。

要记住的最重要的事情是,你用一种语言和风格编写程序,使它们可以被人类读取!计算机可以解析它们的事实非常巧合。

当然,调用静态方法和函数的开销不应该是一个考虑因素 - 而且你肯定会犯过早的优化。如果你担心这个问题,你为什么不为自己量身定做?你会发现虽然速度较慢,但​​差别非常小 - 在编写代码时不应超越主要目标(即它应该工作,应该尽可能清楚它是如何工作的,它应该没有任何一方效果 - )。

+0

是否有纯OOP脚本的例子?我想看一些。 – Shoe 2010-11-01 12:53:13

+0

不,因为PHP不是纯粹的** OO语言(也不是Java)。 (对于不同意的Java程序员,请提供关于原语和执行入口点是纯粹的OO的解释)。然而,在这个限制之下,它可能会编写一些非常类型的应用程序 - 例如看看由horde项目分发的应用程序。 – symcbean 2010-11-01 13:26:46

5

不要使用OOP只是将一组看起来相关的函数组合在一起。

是否使用OOP来逻辑表示有状态和无状态的“事物”,这些事物可以被操纵,具有属性或以各种方式使用。

请不要使用OOP只是因为有人在这里说你应该。

请使用OOP,因为您在data encapsulation中看到了好处。

如果您认为这会让老板高兴,请勿使用OOP

请使用OOP,因为您知道塔科马是丰田是PassengerVehicle是车辆。

不要使用OOP,直到你至少查看了四人帮的设计模式 - 好处变得更加清晰。

请使用OOP,因为您想为使用此类的人员开发易于使用的界面。

相关问题