2013-04-22 64 views
3

我目前正在学习在PHP中使用OOP编写代码,并且经常遇到数据库类和抽象层。我将CMS编码作为一项重大挑战,我开始编写一个数据库课而不用太多考虑它。PHP OOP数据库类 - 它真的需要吗?

我实际上倾向于使用MySQLi(我认为这样做很好),而不是创建一个类来处理CRUD操作,所以我真的需要一个类来处理所有这些东西?

如果不是,连接数据库最好的方法是什么,只需在我的应用程序开始时执行并传递连接?还是真的有一个编码我错过的数据库类的巨大好处?

我在想,错误处理将是一个这样的好处,但如果我尽量让我的班级尽可能接近MySQLi,那么是否有足够的理由继续上课?

+1

为什么关闭一个很好的问题,让您的数据? – 2013-04-22 12:11:43

回答

3

谢谢你的好问题。

PHP OOP数据库类 - 它真的需要吗?

肯定是的,但只有当你不喜欢你的代码中执行的每个查询的重复代码screenfuls。

如果您重新审视需要执行一次平均查询的代码,您可能会注意到它的数量太可怕了。尽管您只需要定义一个查询,传递变量,运行它并获得结果,但您必须编写数千个无用的运算符,并针对每个查询重复执行。

一个例子权从手动(即使没有错误处理)

if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { 
    $stmt->bind_param("s", $city); 
    $stmt->execute(); 
    $stmt->bind_result($district); 
    $stmt->fetch(); 
    echo $district; 
} 

使用数据库辅助类的一个实例:

$district = $db->getOne("SELECT District FROM City WHERE Name=?s", $city); 
echo $district; 

,这对只有单排。对于行数组,在使用原始API的情况下,代码量将增加一倍。

如果使用mysqli,情况会变得更糟。

我们来看一个简单的例子。想象一下,有大量未知大小的ID。您需要添加他们都在寿中的语句简单的查询

SELECT * FROM t WHERE id IN (1,2,3) // filled from array. 

尝试使用mysqli的预处理语句

7

主要好处是,如果你可以让你所有的代码都通过你的数据库对象。您可以轻松更改将来的数据库实施。你说你正在向mysqli学习,但是说你已经变成了PDO的一半,你将不得不重构-everything-。

使用您的自定义数据库对象,您可以简单地更改集成而不影响其余代码。例如。您的objects-> connect()函数仍然可以像现在一样被调用,但底层代码会发生变化,并且它们都在您的自定义类中,所做的更改很少。

这只是许多好处之一。与数据库对象进行交互以运行查询和存储结果的自定义类非常常见(MVC的模型部分 - 通常是扩展一个通常称为RecordSet或类似的具有运行select/update/delete功能的通用基础对象/等等)。再次,您可以轻松地将实现从一种方法更改为另一种方法。

我所描述的一般是面向对象编程的一个非常普遍的优势。请参阅您的常识的答案另一个好处。

+0

除了这些非常好的观点之外,您还可以向CMS的客户(假设您将重新分配)选择数据库。如果您使用ORM对象,切换到Oracle或pgsql可能非常容易,只需切换连接。 – 2013-04-22 12:31:30

+0

@YourCommonSense Drupal支持pgsql和MySQL。我认为Typo3支持MySQL,MariaDB和Oracle。澄清一下,我并不是指迁移时的“切换”,我的意思是您可以让客户使用Oracle,使用MySQL等的客户拥有相同的核心PHP代码库。 – 2013-04-22 12:53:43

+0

@YourCommonSense MariaDB与MySQL有兼容模式,但它们[不再一样](http://blog.mariadb.org/explanation-on-mariadb-10-0/)。 MySQL具有MariaDB尚未实现的功能,反之亦然。 – 2013-04-22 13:05:39