• PHP面向对象和面向过程


    编程界不论是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

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

     

  • 相关阅读:
    Tensorflow的对二次函数的神经网络训练
    ubuntu16.04的Anaconda下的tensorflow安装py3.5
    数字信号处理C语言(3) ------FFT
    数字信号处理C语言(2) ------带高斯噪声的sin函数和组合sin函数
    数字信号处理C语言(1) ------均匀分布和高斯分布随机数
    CCIE学习笔记 ----TSHOOT
    CCIE学习笔记 ----BGP
    CCIE学习笔记 ----GRE over IPsec
    调试
    Java protobuf框架使用向导
  • 原文地址:https://www.cnblogs.com/cuiyuanxin/p/10423550.html
Copyright © 2020-2023  润新知