php面向过程和面向对象的区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/m0_37978143/article/details/102668615

PHP语言是同时可以应用面向过程和面向对象方式的编程,面向过程与面向对象在许多编程语言中只能使用二者之一来进行编程,但是PHP语言与其他编程语言有不同之处,那就是我们可以自由的选择某种编程方式,或者将PHP面向过程和PHP面向对象二者混用。

面向过程编程采用由上至下的程序设计方法,分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成某一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。通过不同对象的属性和行为的使用,解决问题。

下面为大家简单解析两种方式的特点和编程思想的区别。

面向过程程序设计:procedure oriented programming 简称POP,是一种以过程为中心的编程思想,就是分析出解决问题所需要的步骤,然后用变量和函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

举个php连接数据库的小例子:

<?php
//面向过程的连接方法
$conn = mysqli_connect('localhost', 'root', '123456', 'myDB')

$sql = "SELECT id, name, time_created FROM user";

$result = mysqli_query($conn, $sql); 

if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " " . $row["time_created"] . "<br>";
    }
} else {
    echo "0 结果";
}
 
mysqli_close($conn);
?>

面向对象程序设计:object oriented programming 简称OOP,是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。

<?php
//面向对象和面向过程的联合使用连接方法
//类
class IamConnClass{
    //类的属性
    public $servername = "localhost";
    public $username = "root";
    public $password= "123456";
    public $dbname= "myDB";
    
    //类的方法,抑或称之为行为
    public function mysqli_connect(){
        //类的内部属性调用
        return mysqli_connect($this->servername, $this->username, $this->password, $this->dbname);
    }
    
    public function connect_error(){
        return mysqli_connect_error();
    }

    public function query($sql){
        //类内部的方法调用
        return mysqli_query($this->mysqli_connect(), $sql);
    }
}


// 实例化类为对象
$conn = new IamConnClass();
// 使用这个对象的方法,创建连接
$conn_result = $conn -> mysqli_connect();
// Check connection
if ($conn->connect_error()) {
    die("连接失败: " . $conn->connect_error());
} 
 
$sql = "SELECT id, name, time_created FROM user";
$result = $conn->query($sql);

//此处又转换为面向过程(即php的面向对象不是固定的使用方法,而是可以和面向过程互配,灵活使用)
if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " " . $row["time_created"] . "<br>";
    }
} else {
    echo "0 结果";
}
 
//关闭连接
mysqli_close(conn_result);
?>

看到一个简单的例子,描述的非常好,这里套用一下:

用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。

蛋炒饭制作的时候,有一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

所以到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。盖浇饭的好处就是”菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是”可维护性“比较好,”饭” 和”菜”的耦合度比较低。蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。 
例子链接:https://blog.csdn.net/jerry11112/article/details/79027834

看了这篇文章,简单的总结一下!

面向过程

优点:性能比面向对象高
缺点:耦合度高,没有面向对象易维护、易复用、易扩展

面向对象

优点:低耦合、易维护、易复用、易扩展
缺点:性能比面向过程低

这就是两种编程思想之间的区别。

面向过程性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;所以诸如单片机、嵌入式开发等,一般采用面向过程开发,性能是最重要的因素,而且过程相对简单。而针对于互联网中很多庞大的业务系统,使用面向对象的方式开发就是必然的,因为面向对象的程序易维护、易复用、易扩展,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。 

猜你喜欢

转载自blog.csdn.net/m0_37978143/article/details/102668615