Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

PHP面向对象和面向过程

崔元欣 2019-02-23 17:44:00 阅读数:154 评论数:0 点赞数:0 收藏数:0

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

  • oop 面向对象

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

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

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

  • 封装
    把客观事物封装成一个类,通过修饰符改变属性或函数的访问权限达到保护作用
  • 继承
    子类继承父类,可以使用父类的公共属性和方法,可以实现接口,同时实现接口里的所有方法
  • 多态
    覆盖和重载,子类继承父类,子类可以覆盖父类中的方法。一个类中可以同时拥有同一个函数名的方法,但是方法的参数不同,实现结果也不同。

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

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

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

来一段简单的代码demo:

 1 /4 / 面向对象5 / 两个重要概念6 / class app 就是一个类7 // 8 classoop {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 functiondump() {23 echo $this->name;24 }25 26 }27 28 //*/*29 /* 面向对象三大特征30 /* 继承 子类继承父类 子类可以使用父类的公共属性和方法31 /*/ 32 class oop1 extendsoop {33 34 public functiondump1() {35 var_dump($this->sex);36 }37 38 //*/*39 /* 面向对象三大特征40 /* 多态 覆盖和重载 子类继承父类 子类可以覆盖父类的方法,一个类里可以存在用一个函数名方法,但是参数不一样,结果也不一样41 /*/ 42 public functiondump() {43 echo __CLASS__ . '覆盖了父级' . __FUNCTION__ . '的结果';44 echo '
';45 }46 47 }48 49 //*/*50 /* 面向对象三大特征51 /* 继承 子类继承父类 子类可以使用父类的公共属性和方法52 /*/ 53 class oop2 extendsoop {54 55 //*/*56 /* 面向对象三大特征57 /* 多态 覆盖和重载 子类继承父类 子类可以覆盖父类的方法,一个类里可以存在同一个函数名的方法,但是参数不一样,结果也不一样58 /*/ 59 public functiondump() {60 echo __CLASS__ . '覆盖了父级' . __FUNCTION__ . '的结果';61 echo '
';62 }63 64 }65 66 //类是具备某项功能的抽象模型,实际应用中要先实例化(new)后使用,以下就是实例化类,打印$class看到的结果就是对象 67 $class = newoop();68 //object(oop)/#1 (2) { ["name"]=> string(6) "名字" ["sex"]=> array(2) { [0]=> string(3) "男" [1]=> string(3) "女" } } 69 var_dump($class);70 echo '
';71 //实例化之后就可以调用公共属性(变量) 72 $name = $class->name;73 var_dump($name);74 echo '
';75 //实例化之后就可以调用公共函数(方法) 76 $class->dump();77 echo '
';78 $class1 = newoop1();79 var_dump($class1);80 echo '
';81 $class1->dump1();82 echo '
';83 $class1->dump();84 $class2 = newoop2();85 var_dump($class2);86 echo '
';87 $class2->dump();

 

执行结果:

 

PHP面向对象和面向过程

  •  pop 面向过程

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

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

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

代码片段:1 /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 '面向过程的数据库连接方式
';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

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

 

 

版权声明
本文为[崔元欣]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/cuiyuanxin/p/10423550.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;

支付宝红包,每日可领