中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > PHP > PHP综合
避免OOP的形式,POP的思想
作者:佚名 时间:2004-11-13 10:55 出处:互连网 责编:chinaitpower
              摘要:避免OOP的形式,POP的思想
避免OOP的形式,POP的思想
好久没发技术性文章了,今天在21PHP里看到有位兄弟发了这贴子,转了过来.对加强OOP的学习有些用

----------------------------------------------------------
避免OOP的形式,POP的思想
随着PHP对OOP(面向对象编程)支持的增强以及程序设计思想的发展,越来越多的PHP程序员走进了OOP的世界.通过简单的学习,大多数程序员都能

快速的掌握OOP编程的基本技能.程序员们所写的代码里class,new等字符串也越来越多.但是作为程序员的你,是否陷入了一种OO形式,PO思想的

编程陷阱呢?
作为POP时代的程序员,为了实现计算一件房子的所有门的价格,他们会写这样一个函数.
代码:
/******************************************
函数:priceOfHouseDoor($num,$price)
功能:计算所有的门的价格总和
参数:$num 门的数量,$price 每扇门的价格
备注:surfchen @ http://www.yubeinet.com/
******************************************/
function priceHouseDoor($num,$price)
{
return $num*$price;
}
echo priceHouseDoor(2,5);//输出价格
或者干脆来个更过程的:
代码:
$doors=2;//门数量
$price=5;//每扇门的价格
echo $doors*$price;//输出价格
这是典型的POP.当了解了OOP后,很多人可能会改变实现这个功能的代码.或许,程序员们会这么写:
代码:
class house
{
/******************************************
函数:getDoorPrice($num,$price)
功能:计算所有的门的价格总和
参数:$num 门的数量,$price 每扇门的价格
备注:surfchen @ http://www.yubeinet.com/
******************************************/
function getDoorPrice($num,$price)
{
return $num*$price;
}
}
$house=new house;
echo $house->getDoorPrice(2,5);//输出价格
我们一下子就看出来,这段代码用到了OOP的代表 -- 类和实例化.那么,这就是面向对象编程了吗?
我再仔细一看,发现这个类其实只不过是上面的priceOfHouseDoor($num,$price)函数的面向对象形式.

嗯,现在我们先探讨一下到底什么才叫面向对象编程.我的理解是:面向对象编程有两个核心内容.一是类,二是实例.类是对一类事物的抽象,而实

例是这一类事物中的个体.而实例的属性(值)和方法(函数),则分别是这个个体的具体内容和动作.
我们再来看看上面的这个house类.它有一个方法,getDoorPrice($num,$price),引入了两个参数.一个是房子的门的数量,一个是房子门价.我们

发现,当我们使用这个方法时,这两个值是临时构建的,并没有与房子形成任何的联系.在实际生活中,一个房子里的门与房子无任何联系,这是不

可以理解的...正如我们所知道的,OOP其实是我们真实世界的一个缩影.所以,OOP中的房子和房子的门无任何联系,也是不可理解的,是非OO的思

维.
那么,我们应该如何使用真正的OO来实现以上功能呢?请看以下代码:
代码:
class house
{
var $doors;//门的数量
var $pricePerDoors;//每扇门的价格
function setNumOfDoors($num){$this->doors=$num;}//设定门数量
function setPricePerDoor($price){$this->pricePerDoors=$price;}//设定每扇门的价格
/*************
*获得门的价格 *
\*************/
function getDoorPrice()
{
return ($this->doors)*($this->pricePerDoors);
}
}
$house=new house;
$house->setNumOfDoors(2);//设定门数量
$house->setPricePerDoor(5);//设定每扇门的价格
echo $house->getDoorPrice();//输出
我们很明显地看到,以上代码的门的数量和价格房子已经结合在了一起.这才是真正的面向对象.
你不觉得吗?^_^
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有