为什么使用mysqli的面向对象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']; } ?>

为什么使用mysqli的面向对象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,object,mysqli,procedural-programming,Php,Object,Mysqli,Procedural Programming,直到最近,我一直在使用mysql*的过程方法。现在我想转向mysqli和面向对象方法。许多在线资源和书籍都指出,即使在PHP中,OOP也比过程性更好。在阅读了一些在线教程之后,我编写了一个连接到数据库并选择值的小程序。我想知道为什么面向对象的方法更好?另外,这是编写OO php网页的正确方法吗 $host = "localhost"; $username = "root"; $password = ""; $dbname = "compdb"; @ $db = new mysqli($host

直到最近,我一直在使用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'];
}
?>
面向对象方法
$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'];
}
?>
程序方法

$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正在朝着面向对象编程的方向稳步发展

使用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方法;这两个跳跃本身都不会有那么大。

OO的一个优点是,您可以创建自己的类作为这个核心类的扩展,从而使您的方法保持整洁、可扩展的形式。可能是@halfer的重复-我没有想到mysqli的扩展类。现在我明白了。塔克斯