1、面向过程与面向对象的区别
回忆知识,同学们在之前的学习,不管是将代码解耦、功能封装,我们都是使用的function()
自定义函数。
对于一些较大功能的函数,例如数据库的操作,我们只能将其拆分成许多个function()
。
而一些私有的逻辑解耦,只能单独存放在一个文件中保存,否则就极其难维护代码。
而这样的编程方式,就是PHP5.0+
之前,PHP的编程方式,我们将之称为面向过程编程。
在PHP5.0+之后,这样的编程方式已经彻底废弃了,原因是因为PHP提供了一个class{}
类定义。
A、面向过程与面向对象的对比
如果将面向过程的程序解耦,称之为功能拆分,拆分之后的function()
是没办法按一个大的范围管理的,最大的管理范围是用一个文件单独装起来,例如:
1、公共函数库
2、私有函数库
而面向对象的程序解耦,则可以称之为功能设计,我们将某个管理范围内的所有函数都统一放入class{}
类定义中,这样就不再需要使用文件管理函数类别。
同时class{}
还有着许多function()
自定义函数无法做到的特性,将在之后中一一学习到。
下面我们用一个简单的案例,来加深面向对象 与 面向过程的区别:
假设,我们现在要像炼气期升阶考试中一样,封装一些数据库的操作,那么面向过程只能这样做:
php
# 开启数据库
function Start(){}
# 关闭数据库
function End(){}
# 新增数据
function Add(){}
# 修改数据
function Upd(){}
# 删除数据
function Del(){}
# 更多的其他数据操作函数
......
这样每个function()
都是独立的,他们之间没有任何关联,同时当你引入这个保存着所有function()
文件的时候,PHP就会计算这些function()
函数体所占用的内存,
就好比,你建房子,虽然还没开工(还没调用函数),但你已经买了一堆材料回来(函数体积),那就肯定会占用一些面积存放它们啦。
而面向对象的实现方式,则是这样:
php
# 第一个数据库操作封装
class Mysql{
# 开启数据库
public function Start(){}
# 关闭数据库
public function End(){}
# 更多的其他数据操作函数
......
}
# 第二个数据库操作封装
class Oracle{
# 开启数据库
public function Start(){}
# 关闭数据库
public function End(){}
# 更多的其他数据操作函数
......
}
相比于面向过程,我们需要引入这个保存着所有class{}
文件之后,再new
对应的class
,才能调用其内部的function()
函数,虽然比起面向过程来说,这样的使用方式多了一个步骤,却解决了函数重名的问题。
而在引入这个文件的时候,PHP只会计算这个文件大小所占用的内存,不会计算class{}
内部function()
函数体所占用的内存大小,就好比,你建房子,class()
只是一张设计图,而你在没有调用(new
)之前,建房子的材料是还没买回来的(内部函数体积),它所占用的面积就是这张设计图的大小。
B、两者的区别
面向过程优点:
1、代码量少
2、上手简单
面向过程缺点:
1、代码耦合度高、所有功能基本都是考页面引入关联起来
2、解耦能力差
3、解耦依赖function()自定义函数,内存开销巨大
4、项目难管理、代码难维护
面向对象优点:
1、程序逻辑清晰
2、代码耦合度低
3、解耦能力强
4、解耦使用class{},代替页面分离,减少function()所占用的函数体积内存开销
5、基于面向对象实现的单一入口程序,可以更好的管理项目,与维护旧代码
6、使用class{}类定义的函数,可以有效的控制调用权限,让程序更加安全。
面向对象缺点:
1、代码量多
2、上手难度高
C、使用场景
面向过程与面向对象,在编程中的区别,主要是一个主次关系,面向过程主要核心是使用function()
自定义函数为主,面向对象则是使用class{}
类定义为主,function()
自定义函数为辅;
在现在的IT界中,已经基本没人会使用面向过程编程了,因为优缺点太明显。
2、面向对象的抽象概念
class{}
的主要概念,是必须要将它想象为一张 或 一组设计图。