PHP基础:面向对象一(什么是面向对象)

什么是面向过程(POP)

任何事情都需要亲力亲为,比如说从数据库中查询某些数据,第一件事要做的就是定义数据库的地址和端口,并连接数据库,而不是像平时一样直接调用某个类

  • 优点
    • 效率高面向过程适合一些短小的,改动性不大的程序,因不需要实例化对象,所以也不会有额外的性能开销
    • 流程明确从头至尾所有代码都只是关注眼前功能而已,且面向过程代码从上至下执行,具体步骤很清楚
  • 缺点
    • 代码重用性低因没有封装概念,哪里需要什么效果哪里就将这个效果所需的代码重新写一遍
    • 维护难度高程序大起来后,面向过程写出的代码过于臃肿,这会耗费开发人员在一件可能好多处都重复做过的事情上继续浪费时间
    • 扩展能力差需求效果若发生变化,则需要修改对应的一整块儿代码

什么是面向对象(OOP)

它强调的是对象二字,此处的对象指的是真实世界中的一个个确实存在的个体将某种事物看做一类,将某个事物看成一个对象,然后通过继承派生的方式来实现对象间的差异性,这种做法既实现了差异性以应对各种场景,又满足了代码间的解耦,又因为通过继承派生这种本身方式,让后续的开发只需要去继承前人,站在前人的肩膀上继续往前走,这种形式给予了面向对象很强的扩展性,即不用修改原本的代码,需要解决什么问题,直接扩展开发即可

  • 优点
    • 可扩展性强通过继承的方式即可让程序在无需大量修改之前的代码的情况下从容面对后续新添加或改变的场景
    • 代码重用率高面向对象中有封装的概念,其实就是将某些重复使用场景高的代码打成包,那里需要,那里调用即可
    • 耦合度低每个对象都只会去解决特定的事情,因此不会将这个功能的代码与其他功能揉合到一起
    • 维护成本低结构化,模块化的代码更适合人类的思维方式,各个模块间也比较清晰
  • 缺点
    • 效率低因需要创造出很多对象,所以需要更大的性能开销,因此其实不适合底层开发和游戏开发
    • 复杂度高对于每件事物来说,他们的本身其实都是面向过程,包括面向对象也不例外,面向对象也是基于面向过程,而面向对象是给某些事情抽象化,因此复杂度自然会高
    • 学习成本高对于刚接触开发的人们,往往需要花费更多的时间在理解面向对象这件事情上

面向对象和面向过程对比

面向过程解决问题的思维是“步骤化”,遇到一个场景,分析这个场景,然后按照这个场景正常的发展规律来实现具体每一步的效果

// 我现在要从数据库中查询书籍列表数据
// 1. 连接数据库
$conn = new mysqli('host', 'username', 'password', 'database');
if ($conn->connect_error) {
    die('连接失败');
}

// 2. 执行SQL语句
$result = $conn->query('select `id`, `name` from `book`');

// 3. 循环处理结果集中的数据
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        // 数据处理...
    }
} else {
    echo "没有任何记录";
}

面向对象解决问题的思维是“行为化”,把整个场景按照特点,功能等特征来划分开,将存在共性的部分封装到一个类中,然后对每个细微差异都进行派生(即对应创建一个满足需要的类,这个类继承上面的共性的类)

// 此时已经写好了连接数据库的类,我们直接调用就行,需求还是和上面一样
$obj = new Book();
$result = $obj->get();

创建对象也不是为了具体完成某个步骤,而是为了描述某个对象在解决问题时的行为,例如现在的场景是我想让一个名叫张三的人大叫一声,那我就可以在人类这个大类里面,去实例化一个具体的人的这个对象,这个对象有一个特征,就是名字叫“张三”,他暂时也只能做一件事情,就是大叫一下,我们在实例化好这个“张三”后,去调用下它的“大叫”的方法,这个场景就完成了

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!