+ -
当前位置:首页 → 问答吧 → 一场PHP在OOP表现方面的讨论!堪称典范!

一场PHP在OOP表现方面的讨论!堪称典范!

时间:2007-04-11

来源:互联网

此主题必需加为精华.
关于PHP的OOP的讨论堪称典范
从思想到过程的长征之路!
告诉你为什么要OO!
l国内关于PHP OOP讨论最深入的贴子!
良好的英语基础将使你受益终生!
详情见下链接:
http://bbs.chinaunix.net/viewthr ... p;extra=&page=1

作者: 帅的不能再输啦   发布时间: 2007-04-11

作者: dzjzmj   发布时间: 2007-04-11

严重顶!

作者: 肥同小可   发布时间: 2007-04-11

小帅,为什么不直接帖过来呢,我在那里没有登录 ,吃了闭门羹。

作者: PHPChina   发布时间: 2007-04-11

请先登录。。。。

作者: [email protected]   发布时间: 2007-04-11

引用:
原帖由 phpchina 于 2007-4-11 13:49 发表
小帅,为什么不直接帖过来呢,我在那里没有登录 ,吃了闭门羹。
评论太精彩了,有7页,太多了,我怕转过来,大家没烦心把评论看完。

作者: 帅的不能再输啦   发布时间: 2007-04-11

对不起,请登录后再查看此帖!如果您还不是CU会员,请马上免费注册!

晕啊

作者: crab68   发布时间: 2007-04-11

讨论这个问题没意思。
根据需要来选择了 。 oo和 po并不冲突。
但就oo方面讲  php比java相差还很多。
php4里面的oo对于oo特性来讲也就是支持封装、简单的继承而已。php oo的特性并不完善。

作者: flappy   发布时间: 2007-04-12

引用:
原帖由 flappy 于 2007-4-12 13:54 发表
讨论这个问题没意思。
根据需要来选择了 。 oo和 po并不冲突。
但就oo方面讲  php比java相差还很多。
php4里面的oo对于oo特性来讲也就是支持封装、简单的继承而已。php oo的特性并不完善。
如果你没有认真的阅读那篇贴子及其评论,请不要断然发表这样无知的评论。

作者: 帅的不能再输啦   发布时间: 2007-04-12

没有评论一门语言的资本,只有默默地学习..
$this->;db..
还不明白这是什么写法呢.. 分号?

作者: airwin   发布时间: 2007-04-12

引用:
原帖由 帅的不能再输啦 于 2007-4-12 17:27 发表

如果你没有认真的阅读那篇贴子及其评论,请不要断然发表这样无知的评论。
对不起,他说的前两句话我也赞同。
后两句话就有点主观了。
不过我读完真个那篇帖子,了解一些JAVA
我也觉得产生这样的观点是很正常的

作者: thankwsx   发布时间: 2007-04-12

引用:
原帖由 airwin 于 2007-4-12 18:36 发表
没有评论一门语言的资本,只有默默地学习..
$this->;db..
还不明白这是什么写法呢.. 分号?
难道你真的看不出来这是由于编辑器的原因而造成的意外吗?

作者: 帅的不能再输啦   发布时间: 2007-04-12

引用:
原帖由 thankwsx 于 2007-4-12 18:40 发表


对不起,他说的前两句话我也赞同。
后两句话就有点主观了。
不过我读完真个那篇帖子,了解一些JAVA
我也觉得产生这样的观点是很正常的
你也竟没有读懂原楼主的意思,
他说明的是一种思想,而不是简单的码机器。。
真正理解OO的思想,用思想去编程的人在PHP程序员中是不多见的,
好多人是在用非OO的方法写OO的程序,或是用OO的方法写非OO的程序!
至于有些人片面的指责PHP4都OO支持的不好,那正是由于你没有真正领悟到OO的内涵!
在PHPCLASSES网站大多数的程序员还在用PHP4中类的使用方法来实现一些不可思意的新东西。难道PHP4就真的写不出好看的强大的类,我看未必吧。
真正的理解OO编程并不是说你会写类,这只是个基础而已。
真正的理解OO也并不是一件容意的事情,那需要花费很大一部分时间!

作者: 帅的不能再输啦   发布时间: 2007-04-12

耿兄说的好啊!

作者: forest   发布时间: 2007-04-12

我不知道我没有理解原楼主的意思,但是我知道你没有理解我的意思。
当然我也不会激你,到底什么是OO你写出一本来。
面向对象和面向过程是方法,方法要由使用方法的对象,人来实现。
好看强大就是好吗?
还是要根据自己需要的,如果OO很难理解那它不是什么好东西。
如果你说 OO只需要你思路变一下,一下子就开窍了,那么它是个好东西。
不知道今天怎么回事,喜欢和人争执,其实只是坚持越辨越明这个观点。
最后,希望不要借用很多个!来渲泄自己的个人感情。
“难道你真的看不出来。。。”――别人有骗你的必要吗?
最后:人参攻击一下:不要以为模仿小郭同学的“非著名”就是有个性了。如果真的非常喜欢OO就多做点实事。
当然辩论也是必须的。

作者: thankwsx   发布时间: 2007-04-13

引用:
原帖由 thankwsx 于 2007-4-13 07:58 发表
我不知道我没有理解原楼主的意思,但是我知道你没有理解我的意思。
当然我也不会激你,到底什么是OO你写出一本来。
面向对象和面向过程是方法,方法要由使用方法的对象,人来实现。
好看强大就是好吗?
还是 ...
我喜欢斗争,晚上回来继续和你做斗争!

作者: 帅的不能再输啦   发布时间: 2007-04-13

工具的只是工具,关键看使用工具的人的水平,有些人写jsp就像写asp一样,有些人就可以把asp写的跟OO一样,水平问题

作者: leehui1983   发布时间: 2007-04-13

让我们看看廖同学是怎么做的:
http://bbs.chinaunix.net/viewthr ... 1%26filter%3Ddigest

作者: 帅的不能再输啦   发布时间: 2007-04-13

支持一下.......

作者: kenus   发布时间: 2007-04-13

老实说这些讨论都是比较浅的,给出的例子也都很简陋,谈“典范”真是言过其实了。当然也是因为那都是老贴了,哪怕老廖自己的框架,现在也不会再基于PEAR呵呵。

建议大家都看看书或者真正动手学几个PHP开发框架,再来看这些就会有较深刻的了解。 评价一个你都不了解的东西好还是坏怎么行呢?

PHP5的使用率在逐步上升,今后OO和框架是大势所趋。Zend Framework就是一个很好的出发点。认真把文档看完,写一两个程序,再回过头来看这些MVC,OO,就不再是浮沙之上筑高楼了。

作者: Haohappy   发布时间: 2007-04-13

引用:
原帖由 Haohappy 于 2007-4-13 15:57 发表
老实说这些讨论都是比较浅的,给出的例子也都很简陋,谈“典范”真是言过其实了。当然也是因为那都是老贴了,哪怕老廖自己的框架,现在也不会再基于PEAR呵呵。

建议大家都看看书或者真正动手学几个PHP开发框 ...
完全不同意你的观点!
作者通过简单的事例把MVC模式讲解的如此清楚,难道你能找出有任何一本书能够做到?
甚至在无形中也讲解了单例模式!
他简简单单的把框架的原理告诉了你!讲的是如此的清晰!
以致于再学习其它框架的话,会很容易上手,因为你已经知道了大概的原理!
强烈反对一开始连对象是怎么回事儿都搞不清楚就去学习框架的人。这样会误了你的表春的。
只要知道了原理,学习什么框架都可以很快上手,而不要像背函数一样死搬硬圈。

作者: 帅的不能再输啦   发布时间: 2007-04-13

引用:
原帖由 帅的不能再输啦 于 2007-4-13 17:18 发表

完全不同意你的观点!
作者通过简单的事例把MVC模式讲解的如此清楚,难道你能找出有任何一本书能够做到?
甚至在无形中也讲解了单例模式!
他简简单单的把框架的原理告诉了你!讲的是如此的清晰!
以致于 ...
任何一本书? 书太多太多了,你找不到只能说你看的书太少。难道那么多基于MVC开发的人都是看论坛学会MVC的? 你觉得新鲜的东西其实对别人来说已经是几年前的回忆了。 这没关系,闻道有先后,但不要抱着不放,把眼界放宽一点。

这些不是重要,我想说的是:

不要依赖于任何你觉得很高深的讨论和聊天记录来学习新知识,阅读经典书籍进行系统学习是进步的不二法门。

如果你有兴趣可以看看《企业应用架构模式》、《设计模式深入浅出》,还有兴趣的话,也可以研究一下zend framework/cakephp(如果对java有兴趣,也可以看看java的框架,对比一下)。 等你看完那些书再回过头来看这些讨论,真的觉得讨论很浅。你不如把时间节约下来认真看书。

作者: Haohappy   发布时间: 2007-04-14

:L  真要命啊

上次登陆:2004-08-12
跨越了4个年度才再次登陆,竟然没有被清理ID。

作者: hotbone   发布时间: 2007-04-14

这个例子虽然简单通俗,但是正是因为例子太简单了,所以还无法暴露出PHP的OO不足之处。
复杂度一旦达到一定程度,那就不是PHP的OO可以控制得了的。

我非常同意Haohappy的观点

作者: 玉面修罗   发布时间: 2007-04-14

感觉直接看廖老大的的框架就好了。=。=||  
特别是看到那帖子的首页代码=.=|| 和老廖的一样

作者: Phzzy   发布时间: 2007-04-14

在PHP的论坛中总是听到有人对PHP的OOP支持说三道四的,说这有缺陷,那里不足,但是都拿不出实际的例子。原来说过要和大家说说这事,但是一直很忙,现在算是抽了些时间了,所以把我刚刚做过的一个项目的框架拿出来和大家探讨一下。这个项目99%的代码是用oop方式编写的,感觉PHP对于OOP支持非常好,不是一般的好,是非常的好。有由于项目本身是一个商业项目所以源代码不好公布出来,但是基本框架还是可以说一说的,而且经过简化的例子更容易理解一些。如果你对PHP中的OOP还不太了解,还是就此打住吧,先去看看手册,或者基础读物再来看也不迟,反正这个是贴子没有长腿也跑不了。

长话短说,立刻开始吧。我这里会用到一个简单的例子,只有一个半的功能。一个是向浏览器发送一句"Hello, I can say OOP in PHP world!",另外半个功能是从数据库中进行一个查询然后输出到浏览器,说它是半个功能是因为只是作为一个例子讲讲没有实际的数据库操作。

首先从我的第一个文件index.php 开始介绍吧。我的index.php文件是这样的:


CODE:[Copy to clipboard]<?php
include_once ('config.php');
include_once ('class.Application.php');
$app = & new Application();
$app->;run();
?>;
这个就是全部了,虽然只有4行,但是如果用OOP的方式写这个应该就够了吧。
有一点经验的哥们会发现这里只用到了一个Application 对象,那么一定很想知道这个对象究竟长什么样呢?我们继续看看class.Application.php 这个文件的内部。从以上的代码中我们知道她应该至少包含两个方法
Application()

run()
所以大体上应该长成这样


CODE:[Copy to clipboard]<?php

class Application
{
        function Application()
        {

        }

        function run()
        {

        }
}

?>;
现在就算知道Application 是什么样,它好像也没有办法完成我们预先设定的功能呀? 所以还要介绍一下如何运行这个程序,在我的结构中所有的页面都是通过index.php和一个action参数进行访问的例如第一个功能应该这样访问index.php?action=HelloPage,而第二个功能则是通过index.php?action=DatabasePage进行访问。这样的结构大家也许并不陌生吧。所以index.php 页面应当知道传进来的 action 参数是什么,也就是说Application对象应当知道 这个action 参数是什么。所以我们需要给Application增加一个方法 getAction()来获得action参数。既然知道action,知道了要做什么,那么方法 run()也就有知道如何去run了。

同时我还可以把(完成功能的)每一个页面作为一个对象来看待,所以我应该至少还需要两个类
class HelloPage 和
class DatabasePage
由于这两个对象最终都是向浏览器发送页面所以把他们共同的部分提出来作为他们的父类
class Page
以下是三个类文件的内容

class.Page.php


CODE:[Copy to clipboard]<?php

class Page
{
        function Page()
        {
        
        }

        function show()
        {
                //不能直接调用这个方法一定要在子类中去具体实现。
                die('You can not use this funciton directly from Page class');
        }
}
?>;
其中这个show方法应该是所有页面对象都具有的方法,只是在实现上有所不同。

class.HelloPage.php


CODE:[Copy to clipboard]<?php
require_once ("class.Page.php");

class HelloPage extends Page
{
        function HelloPage()
        {
                parent::Page();
        }

        function show()
        {
                echo "Hello, I can say OOP in PHP world!";
        }
}
?>;
class.DatabasePage.php


CODE:[Copy to clipboard]<?php
require_once ("class.Page.php");

class DatabasePage extends Page
{
        function DatabasePage()
        {
                parent::Page();
        }

        function show()
        {
                //做一些数据库操作然后将结果显示出来。
        }
}
?>;
同时我们还遵守这样的一条规则:action的值和调用的页面类的名称保持一致,例如当action=HelloPage的时候程序就知道需要初始化一个HelloPage的对象,有了这样的规则和以上的几个文件我们就可以将 Application 类改进成这样。


CODE:[Copy to clipboard]<?php

class Application
{
        function Application()
        {

        }

        function getAction()
        {

        }

        function run()
        {
                $pageClass = $this->;getAction();
                include_once ("class.".$pageClass.".php");
                $page = & new $pageClass();
                $page->;show();
        }
}

?>;
为什么getAction()空着?因为它太简单了,你自己可以轻松地把它写出来呀。

看到这里,如果你还不太明白,不用急,可以停下来重新再看一遍。

如果全明白了,我们就继续前进。我们还有半个任务没有完成,所以我们需要改进我们的Application和页面类,让它完成数据库操作功能。
进行数据库操作之前首先应当得到一个正确的数据库连接,如果让每个需要数据库连接的页面类去做这样的工作实在是一件非常费时费力的工作,不容易维护管理而且也破坏了oop的设计初衷,进行数据库操作的页面类例如 DatabasePage 只应当完成它份内工作即获得数据。 仔细看看我们的设计不难发现建立数据库连接的工作交给 Application 来做最合适不过了, 所以给Application 增加一个新的成员 $db 并且在初始化的时候将建立的数据库连接赋值给它。


CODE:[Copy to clipboard]<?php
require_once ("class.Database.php");

class Application
{
        var $db;//数据库对象

        function Application()
        {
                $this->;db = & new Database(DB_HOST,DB_NAME,DB_LOGIN,DB_PASS);//$db 现在是一个数据库对象了
        }

        function getAction()
        {
                return $_GET['action']; //简单的实现 getAction;
        }

        funciton & getDatabase()
        {
                return $this->;db;
        }

        function run()
        {
                $pageClass = $this->;getAction();
                include_once ("class.".$pageClass.".php");
                $page = & new $pageClass($this); //这里是唯一做了手脚的地方,将这个Application对象传给页面对象。
                $page->;show();
        }
}

?>;
你现在不用太关心这个 Database对象从何而来如何实现,知道它是一个含有数据库连接的对象就可以了,如果用过phplib, ADODB,或者Pear库的就很容易理解。
这个语句:
$this->;db = & new Database(DB_HOST,DB_NAME,DB_LOGIN,DB_PASS);
就是建立一个数据库连接而已。

至于DB_HOST,DB_NAME,DB_LOGIN,DB_PASS 这些都是常量我们在config.php中已经预先设定。

由于数据库操作页面 DatabasePage 需要进行数据库连接所以它也需要一个变量 $db 来保存数据库对象,所以我们需要把DatabasePage改进成这样:

class.DatabasePage.php


CODE:[Copy to clipboard]<?php
require_once ("class.Page.php");

class DatabasePage extends Page
{
        var $db;

        function DatabasePage(&$app)//将Application对象作为参数接受。
        {
                parent::Page();
                $this->;db = $app->;getDatabase();//获得 Application 中的数据库对象。
        }

        function show()
        {
                $sql = 'SELECT * FROM sale_orders';//简单的一个 SQL 例子。
                $results = $this->;db->;query($sql);//query 是 Database对象的一个公共的方法,通过它向数据库提交SQL查询。
                ...;//做一些操作把得到的结果显示出来。
        }
}
?>;
好了,一个半的功能算是完成了,PHP对于OOP支持得也很漂亮吧,结构清晰,维护方便,至于效率嘛,我可没看出来有什么损失,如果你有兴趣可以自己测试一下。用这样的框架可以轻松应对各种需求的变化:增加各种权限控制,分离数据库层,商业逻辑,和表象层,增加远程调用接口统统不成问题,只是这里实在写不完这么多的东西。真不知道谁还会有理由说PHP 中OOP 很烂呢?

另外,需要提醒大家的是传递对象和赋值的时候要使用 & 符号这样可以保证每次引用的是同一个对象。

作者: huliangchun   发布时间: 2007-04-14

支持一下

作者: heixiake   发布时间: 2007-04-14

引用:
原帖由 Haohappy 于 2007-4-14 11:17 发表


任何一本书? 书太多太多了,你找不到只能说你看的书太少。难道那么多基于MVC开发的人都是看论坛学会MVC的? 你觉得新鲜的东西其实对别人来说已经是几年前的回忆了。 这没关系,闻道有先后,但不要抱着不 ...

你这样不负责任的讲话实在是激起了我的战斗欲望!!
请把第一行中的别人用你自己代替!
书是有很多,但在PHP所有的图书中没有任何一本告诉我如何MVC
我看的书的多少也是我的个人问题,我不和你争辨。
我也不想和你争论到哪儿去学MVC的问题,
你喜欢钻牛角,我不喜欢。
基于MVC开发的人到处都可以学习,我只是向大家推荐了其中一个最简单。
即便是你的回忆,那关我什么事?我新鲜是我的权利,你管的着吗你。
当然我还想让更多的纭纭重生一块从CLASS的初级入到更进一步!起码我不抱任何误人子弟的幻想。
对你那行红字我发表评论如下:
你为什么为这么认为呢?难道我真的是这样吗?难道你看不到我也经常 二三个月不上论坛,难道我天天在家挖鼻孔吃咸菜!你是怎么看到我的本质的?通天眼吗?
最后,
cakephp我正在使用!至于ZF,我不喜欢把PHP弄太高深了,我太浅薄!
再次对一楼观点发表声明:
再一次强烈的推荐那篇文章,确实是一篇好东西,值得认真阅读!
如果又有一位像HAOHAPPY这样的高人看到了这篇文章,请别在回忆你的N年前

[ 本帖最后由 帅的不能再输啦 于 2007-4-14 22:39 编辑 ]

作者: 帅的不能再输啦   发布时间: 2007-04-14

这个收藏咯。。

作者: imacoo   发布时间: 2007-04-14

唉~人牛了就是兼容性不够好,总会受到言论的。我楼上的字打那么大个干嘛,吓我一跳。

作者: imacoo   发布时间: 2007-04-14

引用:
原帖由 imacoo 于 2007-4-14 23:32 发表
唉~人牛了就是兼容性不够好,总会受到言论的。我楼上的字打那么大个干嘛,吓我一跳。
被人无端指责能不激起我的战斗欲望才怪呢?
就要像王朔老师那样过自己的自己!
他HAOHAPPY牛什么牛,他凭什么往地上树一根等高的标杆让大家非要和标杆一样。

作者: 帅的不能再输啦   发布时间: 2007-04-15

引用:
原帖由 帅的不能再输啦 于 2007-4-15 10:47 发表


被人无端指责能不激起我的战斗欲望才怪呢?
就要像王朔老师那样过自己的自己!
他HAOHAPPY牛什么牛,他凭什么往地上树一根等高的标杆让大家非要和标杆一样。
-_-我是好心让你多读点书少走弯路,你倒要和我“战斗”,我真是无语了。。 

当我什么都没说,反正你是管理员,把我的帖都删了吧,何必激动。

作者: Haohappy   发布时间: 2007-04-15

引用:
原帖由 Haohappy 于 2007-4-15 22:55 发表


-_-我是好心让你多读点书少走弯路,你倒要和我“战斗”,我真是无语了。。 

当我什么都没说,反正你是管理员,把我的帖都删了吧,何必激动。
那么谢谢啦,在你没有激动以前我一直保持一颗平常心。
即便是现在我也只是像王朔老师那样只是保留自己的的品格。使自己过更像自己而已!
而不是乖巧的别人!

[ 本帖最后由 帅的不能再输啦 于 2007-4-16 08:44 编辑 ]

作者: 帅的不能再输啦   发布时间: 2007-04-16

几大高手争辩我是插不上嘴啦,每个人对技术的观点都不一样,大家不要激动,都是好同志

作者: leehui1983   发布时间: 2007-04-16

我什么都没看见。不过雪悟不要把字打那么大,那样没有什么意义,只见到你的肤浅。说中国话做中国人,FONT SIZE=1也没用,字大人家不一定听地见看地见。

作者: thankwsx   发布时间: 2007-04-16

引用:
原帖由 thankwsx 于 2007-4-16 10:29 发表
我什么都没看见。不过雪悟不要把字打那么大,那样没有什么意义,只见到你的肤浅。说中国话做中国人,FONT SIZE=1也没用,字大人家不一定听地见看地见。
谢谢,
我的皮肤是很很浅,但视力很好!

大家都应该动脑,光我一人动是没用的。
再说了,也是HAOHAPPY同学先用红色字体刺激我的神经的。我只是摆明事实。。
他老人家非拿自己当小学五年级学生,来把我等看成小学三年级学生。
说的对还行!可是五年级的老同学非要把三年级的学生拉到一块用同一把尺子比身高。有意思么。
再说,那篇文章确实是非常不错的。
推荐一篇文章给大家读,你凭什么就苦大仇深的你。
再有:
遵循人人平等的原则,我简单简述了我的观点。
楼上的似乎应该冷静的把贴子读完了再说话。
断章节取意可不是个好同志。

[ 本帖最后由 帅的不能再输啦 于 2007-4-16 12:46 编辑 ]

作者: 帅的不能再输啦   发布时间: 2007-04-16

还要登陆

作者: h058   发布时间: 2007-04-16

不错啊。。。
:)

作者: luzhou   发布时间: 2007-04-16

也许我不同意你的每一句话,但我誓死保卫你说话的权利。

作者: 刀客羽朋   发布时间: 2007-04-16

哈哈。
刚才还说我肤浅呢。
我的意思你都没搞清楚。
不过我感觉浩兄说的都是实在的。如果你想搞好设计,不能只把眼光放在php上。
那么多语言,每个都有它独到的地方。多看看书确实对你有帮助。
年轻气盛。
你说我我就没事。
人家说你两句。你就恼成这样了 。

[ 本帖最后由 flappy 于 2007-4-17 08:59 编辑 ]

作者: flappy   发布时间: 2007-04-17

大家和气点啊,这是讨论技术不是吵架啊。
看发帖子时间,那篇文章应该已经有好几年历史了吧

作者: 玉面修罗   发布时间: 2007-04-17

我就是由于接触这篇文章才走上PHP的道路的

作者: 一地风飞   发布时间: 2007-04-17

引用:
原帖由 flappy 于 2007-4-17 08:56 发表
哈哈。
刚才还说我肤浅呢。
我的意思你都没搞清楚。
不过我感觉浩兄说的都是实在的。如果你想搞好设计,不能只把眼光放在php上。
那么多语言,每个都有它独到的地方。多看看书确实对你有帮助。
年轻气盛。 ...
我都奔三的人了你还说我年轻,我要真年轻就好了。
要理解你的意思我还得回家查一下康熙大词典去。那太高级了。
我都说过最爱C++了。

作者: 帅的不能再输啦   发布时间: 2007-04-17

:L

作者: leehui1983   发布时间: 2007-04-17

呵呵。
作为版主,我想厚道也是比较重要的因素。
我是菜鸟。也可能是真无知,但无知从负责技术版块的你嘴里说出来。是不是太那个点了?
有理说理,没理听别人说。讽刺、挖苦都不是好版主。
希望这不至于刺激到你!

作者: flappy   发布时间: 2007-04-17

引用:
原帖由 flappy 于 2007-4-17 13:41 发表
呵呵。
作为版主,我想厚道也是比较重要的因素。
我是菜鸟。也可能是真无知,但无知从负责技术版块的你嘴里说出来。是不是太那个点了?
有理说理,没理听别人说。讽刺、挖苦都不是好版主。
希望这不至于刺激 ...
你也傍大款?

作者: 帅的不能再输啦   发布时间: 2007-04-17

引用:
原帖由 帅的不能再输啦 于 2007-4-17 13:55 发表

你也傍大款?
谁是大款,你? 我好gay你啊!

哦,我明白你的意思了 。 哈哈,可笑,度我君子之腹啊。

[ 本帖最后由 flappy 于 2007-4-17 15:02 编辑 ]

作者: flappy   发布时间: 2007-04-17

我觉得这篇文章对于不了解 OO 的开发者来说是非常不错的,因为作者用很简单的代码勾画出了一个 MVC 模式的轮廓。不过,这篇文章确实不适合更进一步的学习。因为作者给出的代码只是一个雏形,在现实生活中缺乏实用价值。

就像任何一个解决方案都有自己适合的场合一样,这篇文章也有适合的读者群体和不适合的读者群体。

对于那些希望了解 OO 的开发者来说,这篇文章是很好的开胃菜,而对于希望进一步提高的开发者来说,这篇文章没有什么价值。

看问题不能非黑既白!


最后,对于 haohappy 极力推荐的 Zend Framework,我个人认为绝对不适合初学者用于作为 OO 学习的入门样板。

Zend Framework 对 OO 的“追求”已经达到了走火入魔的地步!完全是为了 OO 而 OO 的典型!

可以说,Zend Framework 的设计者完全没有足够的 Web 开发和 OO 设计实现经验,所以 Zend Framework 的框架才会一天三变。

当然,ZF 有 Zend.com 充足的资金和人力支持,不是其他开源项目能够比拟的。
但是,谁可以给出一个使用 ZF 创建的成功项目实例来呢?
反观 Symfony、CakePHP 这些成熟、稳定,不断发展中的框架,以及 Code Igniter 这样的生力军都有成功的实际应用。

Zend Framework 一心想创建一个 All in One 的体系,因此它抛弃了所有成熟的代码库,选择一切从头开始。

运用 OO,最重要的不是用 OO 的写法,而是遵循各种成熟的设计模式,将应用软件组件化。从而达到可复用软件开发的目的。

可是,ZF 这种做法,从大方向上就违背了可复用面向对象软件的宗旨!

[ 本帖最后由 fleaphp 于 2007-4-17 18:55 编辑 ]

作者: fleaphp   发布时间: 2007-04-17

做鲜活的自己还是乖巧的别人?
首先我选择前者,做男人必需要有棱有角,王朔那样,郭德纲那样,黄键翔那样!
这些敢说实话的人,不怕得罪人的人,这些个性鲜明的人。
当然,他们每个人的背后都有人在讨厌着他们
很多人都在骂,
但究竟是什么人在骂?为什么要骂?人家哪儿错了?
试问有几个人能答的上来。
人家就是嚣张,就是飞扬跋扈。就是敢在说真话,这就是真正的男人!
做自己敢做的事情,做喜欢的事情,为什么不做呢?
再强烈的反对也对不过自由的思想。。。。
做程序也是如此,但不能过于嚣张。
同样是十台服务器,你比别人跑的更快更好,那么你就是对的。
同样的框架,让刚学PHP的人一上去就学ZF,你不痴人说梦吗?
我必需声明:我确实为一大部分人提供了一个不错的OO教案学习的地方!
我当然可以很负责的讲,从一楼到48楼我的所有回复都远比其他人回复更精彩且很用心
假如你认真的看了,你不会不承认这一点,我发誓,我是在为了大家着想。
fleaphp 说的很好,是个很有心的人,而且也用心看了大部分的贴子。
所以能写出FLEAPHP也不足为奇。
世界上有很多有意思的事情,PHP为使我们做出更有意思的事情为我们提供了很好的平台~~~
对OO的理解由函数式的使用到有基本的概念一楼无疑为你提供了一个不错的通道。
好下,下面就不占用大家的时间!
现在我在49楼后,
楼下的回复不准备再看了!
没有意义的东西占据了大量的版面!我不想充当一个布道者!
我还要去和许多事情(懒惰,键盘,时间,。。。)做战斗
如果你确实对我的生活充满了好奇,那么可以阅读我的生活博客:http://phper.blogbus.com
谢谢所有热心参与讨论的人们!

[ 本帖最后由 帅的不能再输啦 于 2007-4-17 22:00 编辑 ]

作者: 帅的不能再输啦   发布时间: 2007-04-17

引用:
原帖由 fleaphp 于 2007-4-17 18:54 发表
我觉得这篇文章对于不了解 OO 的开发者来说是非常不错的,因为作者用很简单的代码勾画出了一个 MVC 模式的轮廓。不过,这篇文章确实不适合更进一步的学习。因为作者给出的代码只是一个雏形,在现实生活中缺乏实 ...
欢迎来Zend framework版另外开帖讨论呵呵。 似乎只见批判,不见原由,很乐意听听你的详细的见解,最好提提ZF的详细的具体的不足之处。 

作者: Haohappy   发布时间: 2007-04-17

引用:
原帖由 Haohappy 于 2007-4-17 23:27 发表


欢迎来Zend framework版另外开帖讨论呵呵。 似乎只见批判,不见原由,很乐意听听你的详细的见解,最好提提ZF的详细的具体的不足之处。 
呵呵,等我做完《FleaPHP 表数据入口全面演练》这个视频后,一定抽时间把我对 ZF 的看法整理成文发到 ZF 版。

作者: fleaphp   发布时间: 2007-04-18

原来都是牛人,ZF的,FleaPHP的,Blogbus的。。。
我闭嘴,我闭嘴,我闭嘴

作者: thankwsx   发布时间: 2007-04-18

ls才知道啊?这几位可都是强人

作者: leehui1983   发布时间: 2007-04-18

04年就看过这帖子了...三年过去了....PHP现在发展也很快啊...

作者: 秀津   发布时间: 2007-04-18

哈哈,我知道啊,
你也是牛人嘛。
跟在牛人后面吃草

作者: thankwsx   发布时间: 2007-04-19

看过了
还是更注重他的代码
讨论就看的比较少了

作者: orclord   发布时间: 2007-04-19

先说cu上的贴子。不常去cu泡,不过看着这个三年前的贴子还是很不错的。
cu上的贴子展出了一个MVC的思路,是oo或是po都无所谓。
我刚开始触碰一些PHP的框架,但那些框架不是太难以理解,就是功能不够为我所用。所以我选择了自己搭建自己的框架。对框架本身而言,它只能是一个特例,也许换个网站就不是那么好用了,而ZF、Cake以及国内的FleaPHP都提供了一个不错的通用框架,应该承认它们在各自领域的贡献。
孰优孰劣不是开发者说出来的,也不是说它被哪些大站应用了就可以说它好了。
而是它是否符合这个用户的需求。
great software does what customer wants it to do. 我想各框架用不着进行“打压”,毕竟各有各的市场。没有一个软件可以做到很完美。至少对我这样的半桶水而言,我租用的服务器情况和开发水平不上不下使得我没有选择任一个现成的框架,而是利用它们的思路去做出适合我的站点的框架。实际应用上来说,还成。蛮顺手的。

作者: tinny   发布时间: 2007-04-22

看大家那么热闹,上来冒个泡,呵呵

    其实那篇帖子也只是OOP世界的冰山一角而已。我比较同意Haohappy说的,“你现在感觉很新鲜的东西,在别人看来已经是N年前的回忆了”。搞PHP的比较容易犯这个毛病,就是当自己发现一些新东西时,容易飘飘然,殊不知在别的编程领域(如Smalltalk,Java),几年前就有人研究过了。当别人指出这些是老思想老技术时,就会产生强烈的抵触感和敌对感。呵呵,不是针对哪位,我只是说明一种普遍存在的情况,相信很多人都多少能感受得到。我上PHPChina比较少,偶尔浏览些帖子,但也好几次遇见这种情况的,所以我想这种情况还是比较常见的。

    说到OOP,绝不是几天就能学会的。即便你用上了抽象类,接口,继承,等等,看起来是“OO”了,很多时候其实质跟OO本质还是相差十万八千里。OOP不是一种技术,而是一种思维方式,一种试图去建模真实应用模型的一种思维方式。如果没有对这种思维方式的深刻理解,再多的抽象类,再多的接口也没用,出来的也只是一堆怪物而已,没有面向对象所宣称的那么灵活,那么可复用,那么易维护,易扩展,等等,相反却大大增加了维护难度。如果你认为你精通PHP面向对象,那么你可以去看看《领域驱动设计》,看看里头的思想你能理解多少,能产生共鸣的能有多少,能不能从这些共鸣中形成你脑海里的整个PHP应用程序的架构,能不能由这些思想导出你自己的完整的PHP框架,再回过头来看看自己是不是真的精通PHP面向对象。我从去年5月开始接触PHP里的OOP,从对设计模式的迷恋,到对设计模式的反感,一年了,也只是熟悉OOP。。

    另外,解释型的PHP应用跟传统的驻留型桌面应用有着思维范式上的很大差别,参考其它语言(尤其是Java)的框架设计时,必须牢记这些差别,否则开发出来的框架很多时候会跟PHP应用“阻抗不匹配”。

    以上只是一家之言,呵呵,希望大家融洽地交流。

作者: diogin   发布时间: 2007-04-26

另外,看到有些帖子提到一些OOP领域相关书籍,我也推荐几本,呵呵

1. 《面向对象分析与设计》第2版,UML三剑客之一Grady Booch著
2. 《UML面向对象建模与设计》,版次忘了,UML三剑客之一James Rambough(?)著
3. 《对象设计-角色,责任与协作》,Wirfs Rebecca著,经典的责任驱动设计书籍
4. 《企业应用架构模式》,Martin Fowler著
5. 《J2EE核心模式》,Sun公司的几位资深架构师著,对J2EE常用模式讲解得非常透彻
6. 《设计模式-可复用面向对象软件基础》,OOD书籍
7. 《面向模式的软件体系结构》,简称POSA,比较老的书了,但值得一看
8. 《分析模式-可复用对象模型》,Martin Fowler著,专注于OOA
9. 《领域驱动设计》,专注于富领域建模,OOP深入参考
10.《UML与模式应用》,第3版,Craig Larman著,OOA/OOD/迭代开发入门书籍
11.《敏捷软件开发-原则、模式与实践》,精品OOD书籍,Bob大叔著
12.《企业集成模式》,这本书跟PHP就有点远了,呵呵,如果搞EAI,则是必备的

其它的,PHP领域也有一些OOP方面的书,如PHPChina之前翻译的《PHP Architect's guide to PHP Design Patterns》,还有Haohappy在翻译的《PHP5 - Objects, Patterns and Practice》等,都值得一看。

[ 本帖最后由 diogin 于 2007-4-26 21:29 编辑 ]

作者: diogin   发布时间: 2007-04-26

作者: redmangame   发布时间: 2007-04-26

引用:
原帖由 diogin 于 2007-4-26 21:12 发表
看大家那么热闹,上来冒个泡,呵呵

    其实那篇帖子也只是OOP世界的冰山一角而已。我比较同意Haohappy说的,“你现在感觉很新鲜的东西,在别人看来已经是N年前的回忆了”。搞PHP的比较容易犯这个毛病,就是 ...
完全同意,但对HAPPY的表述表示遗憾,
映射是一种美德!
每篇文章只适合特定的一部分人群!
这篇文章适合PHPCHINA的大部分人!
我是其中的受益者之一,犹如我自以为完全撑握了IBM阐述的五种设计模式,但实际的工作中却表明,它完全没有告诉我要怎么样去一步步的实现具体。
而这篇文章,非常浅显的告诉我该怎么去做,不管是用PHP4还是PHP5,
设计模式这玩意,你N*10年前玩过也未必证明他的方法就是过时的,
对于比较高级别或自以为比较高级的人士还是不要阅读的好,以免觉得自己太高深而被别人景仰。
感谢你推荐的所有书目!但我有钱了,一定好好的读一读。
但我觉得在PHPMORE上推荐的书也不错,而且告诉我了原因!
我选择做所有的事,还是选择做一部分事,取决于我自己!

作者: 帅的不能再输啦   发布时间: 2007-04-27

CU的人很牛,那边讨论的问题就比这边高级,偶只有潜水的份。

作者: 会飞的猪   发布时间: 2007-04-28

oo好啊,维护方便啊,
po好啊,速度有保障

作者: hjie   发布时间: 2007-05-03

不知道能不能看懂。

作者: yeac_520   发布时间: 2007-05-20

默默的学习~

作者: fly1983   发布时间: 2007-05-21

引用:
原帖由 fleaphp 于 2007-4-17 18:54 发表
我觉得这篇文章对于不了解 OO 的开发者来说是非常不错的,因为作者用很简单的代码勾画出了一个 MVC 模式的轮廓。不过,这篇文章确实不适合更进一步的学习。因为作者给出的代码只是一个雏形,在现实生活中缺乏实 ...
说了一会  又转到你的 fleaphp 框架了

顺便抨击了 zend framework

;P ;P ;P ;P ;P ;P ;P

作者: danssion   发布时间: 2007-05-23

作者: btsam   发布时间: 2008-01-19

oop经典的文章不少啊,呵呵,谁还想要的可以给我发信

作者: wangchun   发布时间: 2008-01-20

作者: tsbtjy   发布时间: 2008-01-20

学习一下!!

作者: jefsun   发布时间: 2008-03-19

我也顶

作者: naodai   发布时间: 2008-03-19

MARK

作者: FrogPrince   发布时间: 2008-03-19

所谓有理不在声高,讨论是正常的,但感觉这已经超出了正常讨论的范畴了...

变成了个人之间的攻击了.....

作者: ct_174880859   发布时间: 2008-03-20

他写的代码和我好相似哦。

作者: chcn001   发布时间: 2008-03-20

热门下载

更多