编程界不论是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. 你真的知道final关键字吗?

    概述 final在英文中是最终的,不可更改的.在Java中final修饰变量,函数和类,就像这个单词的意思,一旦使用赋值之后不可更改. final修饰的变量不可以被改变 finalTest类 publ ...

  2. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  3. 优雅地 `async/await`

    async/await 虽然取代了回调,使用类似同步的代码组织方式让代码更加简洁美观,但错误处理时需要加 try/catch. 比如下面这样,一个简单的 Node.js 中使用 async/await ...

  4. Android进程间通信(一):AIDL使用详解

    一.概述 AIDL是Android Interface Definition Language的缩写,即Android接口定义语言.它是Android的进程间通信比较常用的一种方式. Android中 ...

  5. 别开心太早,Python 官方文档的翻译差远了

    近几天,很多公众号发布了 Python 官方文档的消息.然而,一个特别奇怪的现象就发生了,让人啼笑皆非. Python 文档的中文翻译工作一直是“默默无闻”,几个月前,我还吐槽过这件事<再聊聊P ...

  6. shell-输入与输出<echo, read, cat, tee >

    1. echo echo命令可以显示文本行或变量,或者吧字符串输入到文件. 用法:echo [option] string   #[option]可选:-e ==>解析转移字符,(常用的\n & ...

  7. Unity 用ml-agents机器学习造个游戏AI吧(2)(入门DEMO)

    前言: 上一篇博文已经介绍了Unity ml-agents的环境配置(https://www.cnblogs.com/KillerAery/p/10629963.html)了. 个人建议先敲demo再 ...

  8. 详解mybatis映射配置文件

    一  mybatis 映射文件结构 mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义. cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的 ...

  9. 如何让用户登录Dynamics 365 Customer Engagement后自动登录到Unified Interface App?

    微软动态CRM专家罗勇 ,回复324或者20190422可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Dynamics 365 Customer Engagement ...

  10. MES是什么,MOM是什么?

    MES简介 MES(Manufacturing Execution System)制造执行系统,用于制造业车间级的信息化管理系统.单说MES系统这个概念比较广泛,大致分为以下几个方面:计划调度.生产. ...