欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP面向对象和面向过程

程序员文章站 2022-07-10 22:32:24
编程界不论是PHP、Python都有这么两种编程思想,oop面向对象、pop面向过程,这两种在功能上没有多大区别,但是在代码编写上却有很大区别。今天就记录一下面向对象和面向过程的优点、缺点、定义、实现过程。 oop 面向对象 面向对象有两个重要的概念:类和对象。 什么是类?类是具备某项功能的抽象模型 ......

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

  • oop 面向对象

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

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

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

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

  • 封装

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

  • 继承

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

  • 多态

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

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

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

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

来一段简单的代码demo:

 

 1 <?php
 2 
 3 /**
 4 * 面向对象 
 5 * 两个重要概念 
 6 * class app 就是一个类
 7 */
 8 class oop {
 9 
10     /**
11     * 面向对象三大特征
12     * 封装 把客观事物封装成一个类,通过修饰符改变类的属性、函数的访问权限,达到保护作用
13     * private 私有成员 public 公共 protected 保护成员
14     */
15     public $name = '名字';
16     public $sex = [
17         '男', '女'
18     ];
19     private $eag = 30;
20     protected $job = '女公关';
21 
22     public function dump() {
23         echo $this->name;
24     }
25 
26 }
27 
28 /**
29 * 面向对象三大特征
30 * 继承 子类继承父类 子类可以使用父类的公共属性和方法
31 */
32 class oop1 extends oop {
33 
34     public function dump1() {
35         var_dump($this->sex);
36     }
37 
38     /**
39     * 面向对象三大特征
40     * 多态 覆盖和重载 子类继承父类 子类可以覆盖父类的方法,一个类里可以存在用一个函数名方法,但是参数不一样,结果也不一样
41     */
42     public function dump() {
43         echo __class__ . '覆盖了父级' . __function__ . '的结果';
44         echo '<br>';
45     }
46 
47 }
48 
49 /**
50 * 面向对象三大特征
51 * 继承 子类继承父类 子类可以使用父类的公共属性和方法
52 */
53 class oop2 extends oop {
54 
55     /**
56     * 面向对象三大特征
57     * 多态 覆盖和重载 子类继承父类 子类可以覆盖父类的方法,一个类里可以存在同一个函数名的方法,但是参数不一样,结果也不一样
58     */
59     public function dump() {
60         echo __class__ . '覆盖了父级' . __function__ . '的结果';
61         echo '<br>';
62     }
63 
64 }
65 
66 //类是具备某项功能的抽象模型,实际应用中要先实例化(new)后使用,以下就是实例化类,打印$class看到的结果就是对象
67 $class = new oop();
68 //object(oop)#1 (2) { ["name"]=> string(6) "名字" ["sex"]=> array(2) { [0]=> string(3) "男" [1]=> string(3) "女" } } 
69 var_dump($class);
70 echo '<br>';
71 //实例化之后就可以调用公共属性(变量)
72 $name = $class->name;
73 var_dump($name);
74 echo '<br>';
75 //实例化之后就可以调用公共函数(方法)
76 $class->dump();
77 echo '<br>';
78 $class1 = new oop1();
79 var_dump($class1);
80 echo '<br>';
81 $class1->dump1();
82 echo '<br>';
83 $class1->dump();
84 $class2 = new oop2();
85 var_dump($class2);
86 echo '<br>';
87 $class2->dump();

 

执行结果:

 

PHP面向对象和面向过程

  •  pop 面向过程

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

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

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

代码片段:

 1 <?php
 2 
 3 /**
 4 * 面向过程的数据库连接方式
 5 */
 6 
 7 
 8 function db($cnf) {
 9 
10     $config = [
11         'host' => 'localhost',
12         'username' => 'root',
13         'password' => 'root',
14         'databases' => '',
15         'port' => 3306,
16         'conding' => 'utf8'
17     ];
18 
19     $rows = array();
20 
21     if(isset($cnf) && is_array($cnf)) {
22         $config = array_merge($config, $cnf);
23     }
24     $link = mysqli_connect($config['host'], $config['username'], $config['password'], $config['databases'], $config['port']);
25     if(mysqli_connect_errno($link)) {
26         die('mysql数据库连接失败,错误代码error:' . mysqli_connect_errno());
27     }
28     // if(!$config['databases']) {
29     //     $conding = $config['conding'];
30     //     mysqli_query("set names '{$condig}'", $link);
31     //     mysqli_select_db($config['databases'], $link);
32     // }
33     $sql = 'select * from niuniu_user limit 1';
34     $query = mysqli_query($link, $sql);
35     $row = mysqli_fetch_array($query, mysqli_assoc);
36     if(mysqli_num_rows($query) > 1) {
37         while($row) {
38             $rows[] = $row;
39         }
40     } else {
41         $rows = $row;
42     }
43 
44     var_dump($rows);
45 
46     mysqli_close($link);
47 }
48 
49 
50 echo '面向过程的数据库连接方式<br>';
51 
52 $cnf = [
53     'host' => '172.17.0.2',
54     'username' => 'root',
55     'password' => 'cuiyuanxin66666',
56     'databases' => 'nndb'
57 ];
58 
59 db($cnf);

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

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