编程界不论是PHP、Python都有这么两种编程思想,oop面向对象、pop面向过程,这两种在功能上没有多大区别,但是在代码编写上却有很大区别。今天就记录一下面向对象和面向过程的优点、缺点、定义、实现过程。

  • oop 面向对象

面向对象有两个重要的概念:类和对象。

什么是类?类是具备某项功能的抽象模型,在应用当中类需要实例化也就是new之后使用,这个时候就引出了对象。

什么是对象?对象是类实例化之后的一个产物,是一个实体。

面向对象的3个基础特征:

  • 封装

把客观事物封装成一个类,通过修饰符改变属性或函数的访问权限达到保护作用

  • 继承

子类继承父类,可以使用父类的公共属性和方法,可以实现接口,同时实现接口里的所有方法

  • 多态

覆盖和重载,子类继承父类,子类可以覆盖父类中的方法。一个类中可以同时拥有同一个函数名的方法,但是方法的参数不同,实现结果也不同。

面向对象的几个名词:类、对象、属性、方法、实例化。

面向对象优点:可扩展性高,可复用,易维护

面向对象缺点:编程复杂度高,性能比面向过程低(需要实例化类)

来一段简单的代码demo:

 <?php

 /**
* 面向对象
* 两个重要概念
* class app 就是一个类
*/
class oop { /**
* 面向对象三大特征
* 封装 把客观事物封装成一个类,通过修饰符改变类的属性、函数的访问权限,达到保护作用
* private 私有成员 public 公共 protected 保护成员
*/
public $name = '名字';
public $sex = [
'男', '女'
];
private $eag = 30;
protected $job = '女公关'; public function dump() {
echo $this->name;
} } /**
* 面向对象三大特征
* 继承 子类继承父类 子类可以使用父类的公共属性和方法
*/
class oop1 extends oop { public function dump1() {
var_dump($this->sex);
} /**
* 面向对象三大特征
* 多态 覆盖和重载 子类继承父类 子类可以覆盖父类的方法,一个类里可以存在用一个函数名方法,但是参数不一样,结果也不一样
*/
public function dump() {
echo __CLASS__ . '覆盖了父级' . __FUNCTION__ . '的结果';
echo '<br>';
} } /**
* 面向对象三大特征
* 继承 子类继承父类 子类可以使用父类的公共属性和方法
*/
class oop2 extends oop { /**
* 面向对象三大特征
* 多态 覆盖和重载 子类继承父类 子类可以覆盖父类的方法,一个类里可以存在同一个函数名的方法,但是参数不一样,结果也不一样
*/
public function dump() {
echo __CLASS__ . '覆盖了父级' . __FUNCTION__ . '的结果';
echo '<br>';
} } //类是具备某项功能的抽象模型,实际应用中要先实例化(new)后使用,以下就是实例化类,打印$class看到的结果就是对象
$class = new oop();
//object(oop)#1 (2) { ["name"]=> string(6) "名字" ["sex"]=> array(2) { [0]=> string(3) "男" [1]=> string(3) "女" } }
var_dump($class);
echo '<br>';
//实例化之后就可以调用公共属性(变量)
$name = $class->name;
var_dump($name);
echo '<br>';
//实例化之后就可以调用公共函数(方法)
$class->dump();
echo '<br>';
$class1 = new oop1();
var_dump($class1);
echo '<br>';
$class1->dump1();
echo '<br>';
$class1->dump();
$class2 = new oop2();
var_dump($class2);
echo '<br>';
$class2->dump();

执行结果:

  • pop 面向过程

面向过程的代码执行是从上到下(从前到后),有一个个函数去实现步骤,使用的时候需要一个一个依次调用。

面向过程优点:性能比面向对象高(不用去实例化类),将复杂的问题流程化,进而简单化。

面向过程缺点:不易维护,可扩展性不高。

代码片段:

 <?php

 /**
* 面向过程的数据库连接方式
*/ function db($cnf) { $config = [
'host' => 'localhost',
'username' => 'root',
'password' => 'root',
'databases' => '',
'port' => 3306,
'conding' => 'utf8'
]; $rows = array(); if(isset($cnf) && is_array($cnf)) {
$config = array_merge($config, $cnf);
}
$link = mysqli_connect($config['host'], $config['username'], $config['password'], $config['databases'], $config['port']);
if(mysqli_connect_errno($link)) {
die('MySQL数据库连接失败,错误代码ERROR:' . mysqli_connect_errno());
}
// if(!$config['databases']) {
// $conding = $config['conding'];
// mysqli_query("SET NAMES '{$condig}'", $link);
// mysqli_select_db($config['databases'], $link);
// }
$sql = 'select * from niuniu_user limit 1';
$query = mysqli_query($link, $sql);
$row = mysqli_fetch_array($query, MYSQLI_ASSOC);
if(mysqli_num_rows($query) > 1) {
while($row) {
$rows[] = $row;
}
} else {
$rows = $row;
} var_dump($rows); mysqli_close($link);
} echo '面向过程的数据库连接方式<br>'; $cnf = [
'host' => '172.17.0.2',
'username' => 'root',
'password' => 'cuiyuanxin66666',
'databases' => 'nndb'
]; db($cnf);

源代码已上传GitHub:https://github.com/cuiyuanxin/php-demo

纯手打笔记,如有错误请评论提出,谢谢。

PHP面向对象和面向过程的更多相关文章

  1. 大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)

    一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认 ...

  2. 面向对象与面向过程 $this的注意事项和魔术方法set和get

    一.面向对象与面向过程的区别: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程,强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象.面向对象更加强调运用人类在日常的思维逻辑 ...

  3. JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等

    一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...

  4. Java基础知识强化20:面向对象和面向过程的思想对比

    面向对象与面向过程的区别  1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...

  5. python的面向对象和面向过程

    一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...

  6. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,

    1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...

  7. Day5-1 面向对象和面向过程

    摘要: 类的定义 类的增删改查 对象的增删改查 对象的查找和绑定 面向对象和面向过程的区别: 1.面向过程就像是工厂的流水线,按部就班的有序的工作. 优点:把复杂的问题简单化 缺点:可扩展性差.一个步 ...

  8. python面向对象和面向过程介绍与区别

    一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...

  9. Python 面向对象和面向过程对比

    # 大象装冰箱 # 脚本, 此时代码是最简单的. 不需要构思整个程序的概况 print("开门") print("装大象") print("关门&qu ...

随机推荐

  1. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析小结

    ========== Spark SQL ==========1.Spark SQL 是 Spark 的一个模块,可以和 RDD 进行混合编程.支持标准的数据源.可以集成和替代 Hive.可以提供 J ...

  2. Java 运算符 % 和 /

    / 是除运算符, %是取模运算符 区别: / 是普通的除法运算,如果除数和被除数都是整数,则商是取整 %是求余数 private static void test() { System. / ); S ...

  3. go语言调度器源代码情景分析之五:汇编指令

    本文是<go调度器源代码情景分析>系列 第一章 预备知识的第4小节. 汇编语言是每位后端程序员都应该掌握的一门语言,因为学会了汇编语言,不管是对我们调试程序还是研究与理解计算机底层的一些运 ...

  4. 游戏AI之决策结构—有限状态机/行为树(2)

    目录 有限状态机 行为树 控制节点 条件节点 行为节点 装饰节点 总结 额外/细节/优化 游戏AI的决策部分是比较重要的部分,游戏程序的老前辈们留下了两种经过考验的用于AI决策的结构: 有限状态机 行 ...

  5. Netty源码—三、select

    NioEventLoop功能 前面channel已经准备好了,可以接收来自客户端的请求了,NioEventLoop作为一个线程池,只有一个线程,但是有一个queue存储了待执行的task,由于只有一个 ...

  6. MongoDB 运维相关的命令

    1.在线释放内存 use admindb.runCommand({closeAllDatabases:1}) 注:3.2 版本 已经去掉了这个命令了 2.rs.status() 查询复制集状态 3.d ...

  7. 【SQL Server】利用游标将学生表中的成绩转化为绩点

    软件工程综合实践第一次作业 代码来源:班上同学的数据库大作业 alter table sc add GPA float; --加入绩点列 alter table sc ,);--将表按原始位置顺序编号 ...

  8. 在docker私有仓库如何查看有哪些镜像?

    搭建了docker私有仓库,上传了一些镜像,时间长了就会忘了有哪些镜像,在网上查了,有大佬是通过脚本查看的,多厉害! #!/usr/bin/env python#-*- coding:utf-8 -* ...

  9. Vs 中关于项目中的某 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”

    问题:     首先出现这个bug的是在我的vs2017社区版的ide上,这两天使用了出现了一个非常神奇的问题,就是我程序中的nuget包总提示找不到源文件,并且我点击Nuget还原的话还一直提示着一 ...

  10. ubuntu修改键盘映射

    code {margin: 0;padding: 0;font-size: 100%;word-break: normal;background: transparent;border: 0;}ol ...