为什么使用mysqli的面向对象PHP比过程方法更好


Why is object oriented PHP with mysqli better than the procedural approach?

直到最近,我一直在使用mysql*的过程方法。现在我想转向mysqli和面向对象的方法。许多在线资源和书籍都指出,即使在PHP的情况下,OOP也比过程化要好。在完成了一些在线教程之后,我编写了一个连接到数据库并选择值的小程序。我想知道为什么面向对象的方法更好?另外,这是编写OO php网页的正确方法吗?

面向对象的方法

$host = "localhost";
$username = "root";
$password = "";
$dbname = "compdb";
@ $db = new mysqli($host, $username, $password, $dbname);
if(mysqli_connect_errno())
{
    die("Connection could not be established");
}
$query = "SELECT company_id FROM company_basic_details WHERE company_name = 'ABC'";
$result = $db->query($query);
$total_num_rows = $result->num_rows;
echo "The Results Are : <br>";
while($row = $result->fetch_array())
{
    echo $row['company_id'];
}
?>

程序方法

<?php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "compdb";
@ $db = mysqli_connect($host, $username, $password, $dbname);
if(mysqli_connect_errno())
{
    die("Connection could not be established");
}
$query = "SELECT company_id FROM company_basic_details WHERE company_name = 'ABC'";
$result = mysqli_query($db, $query);
$total_num_rows = mysqli_num_rows($result);
echo "The Results Are : <br>";
while($row = mysqli_fetch_array($result))
{
    echo $row['company_id'];
}
?>

主要原因是PHP正朝着OO编程的方向稳步发展。

使用mysqli_xxx()函数而不是OOP等价函数没有错;就代码而言,它是完全相同的。

唯一的问题是,在人们认为写得好的PHP代码方面,你会越来越落后于曲线。

值得注意的是,PDO库被认为是PHP中大多数DB代码的理想库,它只是OOP。它没有程序接口。在最近的几个版本中,PHP中添加的大多数其他新功能也没有。如果你想充分使用PHP,你无论如何都需要了解OOP。

还有一点是关于为DB创建扩展类的能力——类似于以下内容:

class myDB extends mysqli {
     .... your own stuff here to extend and improve the base mysqli class
}

当然,使用过程代码也可以实现同样的目的,但它不如OOP方法那么简洁。当然,只有当你真的想扩展这个类时,这才是相关的。

然而,作为第一步,从mysql_xxx()移动到mysqli_xxx()是一个很好的开始。将整个过程转移到使用OOP接口会更好,但切换到mysqli函数是一个良好的开端。

首先使用过程接口肯定会使从旧的mysql_xx()函数的转换变得更容易,因此,如果切换到OOP接口在一开始是一个太大的飞跃,不要觉得必须一次性完成所有操作。从转换到过程mysqli函数开始,然后稍后切换到OOP方法;两次跳跃本身都不会那么大。