PHP面向对象和面向过程
编程界不论是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面向对象和面向过程的更多相关文章
- 大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)
一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认 ...
- 面向对象与面向过程 $this的注意事项和魔术方法set和get
一.面向对象与面向过程的区别: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程,强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象.面向对象更加强调运用人类在日常的思维逻辑 ...
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- Java基础知识强化20:面向对象和面向过程的思想对比
面向对象与面向过程的区别 1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...
- python的面向对象和面向过程
一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...
- 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...
- Day5-1 面向对象和面向过程
摘要: 类的定义 类的增删改查 对象的增删改查 对象的查找和绑定 面向对象和面向过程的区别: 1.面向过程就像是工厂的流水线,按部就班的有序的工作. 优点:把复杂的问题简单化 缺点:可扩展性差.一个步 ...
- python面向对象和面向过程介绍与区别
一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...
- Python 面向对象和面向过程对比
# 大象装冰箱 # 脚本, 此时代码是最简单的. 不需要构思整个程序的概况 print("开门") print("装大象") print("关门&qu ...
随机推荐
- 线上应用调试利器 --Arthas
在之前的文章中,我介绍了使用 Btrace 工具进行线上代码的debug (https://www.cnblogs.com/yougewe/p/10180483.html),其大致原理就是通过字节码注 ...
- Linux创建普通用户
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 1.创建用户,-m表示同时创建用户家目录 sudo useradd -m hadoop 2.为创建的hadoop用户设置密码 sudo passwd ...
- Java进阶篇之十五 ----- JDK1.8的Lambda、Stream和日期的使用详解(很详细)
前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. Lambda Lambda介绍 Lambda 表达式(lamb ...
- JS原型--原型链
构造函数-->原型--->prototype-->__proto__-->constructor-->原型链 构造函数 什么是构造函数?我理解构造函数就是可以用来生 ...
- Asp.Net Core Web应用程序—探索
前言 作为一个Windows系统下的开发者,我对于Core的使用机会几乎为0,但是考虑到微软的战略规划,我觉得,Core还是有先了解起来的必要. 因为,目前微软已经搞出了两个框架了,一个是Net标准( ...
- Java设置PDF有序、无序列表
文档中的设置有序或无序列表是一种反应内容上下级关系或者内容相同属性的方式,与单纯的文字叙述相比,它能有效增强文档内容的条理性,突出重点.因此,本文将分享通过Java编程在PDF文档中设置有序或无序列表 ...
- Android Aop日志
Android在许多情况下需要知道一些方法的耗时,然后对与这些耗时进行一些处理和优化.当然我们可以在方法的开头和结尾分别来打一行日志来解决这个问题.但是这个方式侵入性强,而且比较难以修改和删除这些日志 ...
- cmake 入门实战
当你的程序只有一个源文件时,直接就可以用gcc命令编译它 g++ main.cc 这样会输出一个main.out https://www.hahack.com/codes/cmake/
- 抽象类(abstract class)与接口(interface)的异同
抽象类:如果一个类中包含抽象方法,那么这个类就是抽象类.在Java语言中,可以通过把类或类中的某些方法声明为abstract(abstract只能修饰类或方法,不能修饰属性)来表示一个类是抽象类. 接 ...
- Go基础(1)
demo1: package add var Name string = "hello world" var Age int = 10 package main import ( ...