编程界不论是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. 浅析JavaScript解析赋值、浅拷贝和深拷贝的区别

    文章首发于sau交流学习社区 一.赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为: 1.基本数据类型:赋值,赋值之后两个变量互不影响 2.引用数据类型:赋**址**,两个变量具有相同 ...

  2. 手把手学会MySql主从配置

    001 开启二进制日志. vi /data/mysql/port-3306/my.cnf log-bin=mysql-bin 002 在master上为从主机新建一个专门用于同步的账户,并授权REPL ...

  3. gem安装redis库时报错

    报错一: [root@Redis-1 software]# /usr/local/ruby/bin/gem install redis-3.2.2.gem ERROR: Loading command ...

  4. SqlServer 将纯数字的时间转换为DateTime

    由于数据库存的是整个字符串组到一起了,C#代码是这个样子的. public static string time(DateTime dt) { ) ? ) ? ) ? ) ? ) ? " + ...

  5. 版本号对比 -- Python实现

    相同位数版本号大小比较: def abc(str1, str2): if str1 == "" or str2 == "": print("输入包含空 ...

  6. .NETCore 基于 dbfirst 体验快速开发项目

    简介 今天出场是进化了多年的生成器工具,根据数据库结构(表.视图.存储过程.外键.各种类型.备注)快速生成一个项目,并自带后台管理系统.篇幅有限本文只讲解快速开发的使用过程,具体开发中的细节日后有空再 ...

  7. USB总线标准

    1.USB总线类型: OHCI(Open Host Controller Interface)是支持USB1.1的标准,但它不仅仅是针对USB,UHCI(Universal Host Controll ...

  8. 如何让div中的table水平居中

    <div style="text-align:center"> <table border="1" cellpadding="3&q ...

  9. SAP HUM事务代码 HUMAT 之初探

    SAP HUM事务代码 HUMAT 之初探 SAP菜单中,该事务代码在这里: 1)如下的inbound delivery号码, Document flow, 已经完成了PGR, 2)执行HUMAT,进 ...

  10. openlayers4 入门开发系列之热力图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...