热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

随着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();//输出

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

本文地址:http://www.nowamagic.net/librarys/veda/detail/1162,欢迎访问原出处。


推荐阅读
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • Java中的基本数据类型与包装类解析
    本文探讨了Java编程语言中的8种基本数据类型及其对应的包装类。通过分析这些数据类型的特性和使用场景,以及自动拆装箱机制的实现原理,帮助开发者更好地理解和应用这些概念。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 本文详细介绍了Java编程语言中的基本数字类型,包括各类运算符(算术、关系、逻辑、位运算)的使用方法,以及Math和Random类的功能与应用。 ... [详细]
  • 本文提供了多种方法来计算给定年份和月份的起始日和结束日,并进一步探讨了如何根据年、月、周获取特定周的起始日和结束日。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文详细解析了Java中throw和throws的关键区别,同时涵盖了JDK的定义、Java虚拟机的关键约定、Java的跨平台性、自动垃圾回收机制、源文件结构、包的概念及作用等多个核心知识点,旨在帮助学生更好地准备Java期末考试。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • PC时代的传奇人物
    回顾过去几十年,个人电脑(PC)的发展历程犹如一部英雄史诗。每一位杰出人物都在这一领域留下了不可磨灭的印记,他们的贡献不仅推动了技术的进步,也深刻影响了现代社会的发展。 ... [详细]
  • 本文详细介绍了Java的安装、配置、运行流程以及有效的学习方法,旨在帮助初学者快速上手Java编程。 ... [详细]
author-avatar
翔溢_142
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有