Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP OOP数据库类-真的需要它吗?_Php_Oop_Mysqli - Fatal编程技术网

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

PHP OOP数据库类-真的需要它吗?,php,oop,mysqli,Php,Oop,Mysqli,我目前正在学习在PHP中使用OOP进行编码,并且经常遇到数据库类和抽象层。我编写CMS是一个巨大的挑战,我开始编写一个数据库类而没有过多考虑它 我实际上倾向于按原样使用MySQLi(我认为按原样使用很好),而不是创建一个类来处理CRUD操作,所以我真的需要一个类来处理所有这些东西吗 如果没有,连接到数据库的最佳方式是什么?只需在应用程序开始时进行连接并传递连接即可?或者,编写我所缺少的数据库类真的有巨大的好处吗 我认为错误处理就是这样一个好处,但如果我让我的类尽可能靠近MySQLi,这是否是继续

我目前正在学习在PHP中使用OOP进行编码,并且经常遇到数据库类和抽象层。我编写CMS是一个巨大的挑战,我开始编写一个数据库类而没有过多考虑它

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

如果没有,连接到数据库的最佳方式是什么?只需在应用程序开始时进行连接并传递连接即可?或者,编写我所缺少的数据库类真的有巨大的好处吗


我认为错误处理就是这样一个好处,但如果我让我的类尽可能靠近MySQLi,这是否是继续使用类的充分理由呢?

主要的好处是,如果您可以让所有代码都通过数据库对象。您可以在将来轻松地更改数据库实现。你说你正在学习mysqli,但如果你改为PDO,那么你必须重构一切

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

这只是众多好处之一。与数据库对象接口以运行查询和存储结果的自定义类非常常见(MVC的模型部分-通常扩展公共基础对象,通常称为记录集或具有运行select/update/delete/etc功能的类似对象)。同样,您可以轻松地将实现从一种方法更改为另一种方法


我所描述的是面向对象编程的一个常见优势。另一个好的优点是,请看你的常识答案

谢谢你提出的好问题

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

当然可以,但前提是您不喜欢在代码中执行的每个查询都有一屏重复的代码

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

手册中的示例(即使没有错误处理)

使用数据库帮助器类的示例:

$district = $db->getOne("SELECT District FROM City WHERE Name=?s", $city);
echo $district;
这只适用于单行。对于行数组,如果使用原始API,代码量将加倍

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

让我们举个简单的例子。假设有一个大小未知的ID数组。您需要将它们全部添加到简单查询中的tho IN语句中

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

尝试使用mysqli准备的语句获取您的数据

为什么关闭一个好问题?除了这些非常好的要点之外,您还为您的CMS客户(假设您将重新分发)提供了一个数据库选择。如果您使用ORM对象,切换到Oracle或pgsql可能非常容易,您只需切换连接即可。@YourCommonSense从我的头脑中跳出来,Drupal支持pgsql和MySQL。我认为Typo3支持MySQL、MariaDB和Oracle。澄清一下,我的意思不是迁移中的“切换”,我的意思是你可以让客户使用Oracle,客户使用MySQL等具有相同的核心PHP代码库。@YourCommonSense MariaDB与MySQL有一种兼容模式,但它们是。MySQL具有MariaDB尚未实现的功能,反之亦然。
SELECT * FROM t WHERE id IN (1,2,3) // filled from array.