频道栏目
首页 > 资讯 > 设计模式 > 正文

面向对象的形式,面向过程的思想

16-01-07        来源:[db:作者]  
收藏   我要投稿

随着PHP对OOP(面向对象编程)支持的增强以及程序设计思想的发展,越来越多的PHP程序员走进了OOP的世界。通过简单的学习,大多数程序员都能快速的掌握OOP编程的基本技能。程序员们所写的代码里class,new等字符串也越来越多。但是作为程序员的你,是否陷入了一种OO形式,PO思想的编程陷阱呢?

作为POP时代的程序员,为了实现计算一件房子的所有门的价格,他们会写这样一个函数。

/******************************************
函数:priceOfHouseDoor($num,$price)
功能:计算所有的门的价格总和
参数:$num门的数量,$price每扇门的价格
******************************************/
function priceHouseDoor($num,$price)
{
return $num*$price;
}
echo priceHouseDoor(2,5);//输出价格

或者干脆来个更过程的:

$doors=2;//门数量
$price=5;//每扇门的价格
echo $doors*$price;//输出价格

这是典型的POP。当了解了OOP后,很多人可能会改变实现这个功能的代码。或许,程序员们会这么写:

classhouse
{
/******************************************
函数:getDoorPrice($num,$price)
功能:计算所有的门的价格总和
参数:$num门的数量,$price每扇门的价格
******************************************/
functiongetDoorPrice($num,$price)
{
return$num*$price;
}
}
$house=newhouse;
echo $house->getDoorPrice(2,5);//输出价格

我们一下子就看出来,这段代码用到了OOP的代表--类和实例化。那么,这就是面向对象编程了吗?

我再仔细一看,发现这个类其实只不过是上面的priceOfHouseDoor($num,$price)函数的面向对象形式。

嗯,现在我们先探讨一下到底什么才叫面向对象编程。我的理解是:面向对象编程有两个核心内容。一是类,二是实例。类是对一类事物的抽象,而实例是这一类事物中的个体。而实例的属性(值)和方法(函数),则分别是这个个体的具体内容和动作。

我们再来看看上面的这个house类。它有一个方法,getDoorPrice($num,$price),引入了两个参数。一个是房子的门的数量,一个是房子门价。我们发现,当我们使用这个方法时,这两个值是临时构建的,并没有与房子形成任何的联系。在实际生活中,一个房子里的门与房子无任何联系,这是不可以理解的。正如我们所知道的,OOP其实是我们真实世界的一个缩影。所以,OOP中的房子和房子的门无任何联系,也是不可理解的,是非OO的思维。

那么,我们应该如何使用真正的OO来实现以上功能呢?请看以下代码:

classhouse
{
var$doors;//门的数量
var$pricePerDoors;//每扇门的价格
functionsetNumOfDoors($num){$this->doors=$num;}//设定门数量
functionsetPricePerDoor($price){$this->pricePerDoors=$price;}//设定每扇门的价格
/*************\
*获得门的价格*
\*************/
functiongetDoorPrice()
{
return($this->doors)*($this->pricePerDoors);
}
}
$house=newhouse;
$house->setNumOfDoors(2);//设定门数量
$house->setPricePerDoor(5);//设定每扇门的价格
echo$house->getDoorPrice();//输出

我们很明显地看到,以上代码的门的数量和价格房子已经结合在了一起。这才是真正的面向对象。

相关TAG标签
上一篇:怎样的代码才是健壮的?
下一篇:实现一个自动垃圾回收的思路
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站