【问题标题】:Why is object oriented PHP with mysqli better than the procedural approach? [closed]为什么带有 mysqli 的面向对象的 PHP 比过程方法更好? [关闭]
【发布时间】:2013-02-05 14:45:40
【问题描述】:

直到最近,我一直在使用 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'];
}
?>

【问题讨论】:

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

标签: php object mysqli procedural-programming


【解决方案1】:

主要原因是PHP在朝着OO编程方向稳步前进。

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

唯一的问题是,在人们认为编写良好的 PHP 代码方面,您将越来越落后于曲线。

值得注意的是,被认为是 PHP 中大多数 DB 代码的理想选择的 PDO 库是 OOP-only。它没有程序界面。在过去的几个版本中,大多数其他新特性也没有添加到 PHP 中。如果你想充分利用 PHP,无论如何你都需要了解 OOP。

为您的数据库创建扩展类的能力也很重要——像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多