Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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 每个类或站点范围的数据库对象?_Php_Database - Fatal编程技术网

Php 每个类或站点范围的数据库对象?

Php 每个类或站点范围的数据库对象?,php,database,Php,Database,我有一个数据库类,它的构造使它在运行第一个查询时打开到数据库的连接。其他用于站点的用户、组等的类是否应该各自创建一个数据库对象?这使得类易于在其他地方部署;它们将仅依赖于数据库类。但是,这需要我在每个类中放置凭据。另一种对我来说不那么麻烦的方法是创建一个数据库对象并将其保存在一个全局变量中。这在减少活动数据库连接的同时,使配置更容易;凭据只需设置一次 我在某个地方听说应该避免使用全局变量。最佳实践方法是什么?我将创建一个只包含连接管理内容的基类,而不包含特定于表的内容。然后,您可以将凭据放在那里

我有一个数据库类,它的构造使它在运行第一个查询时打开到数据库的连接。其他用于站点的用户、组等的类是否应该各自创建一个数据库对象?这使得类易于在其他地方部署;它们将仅依赖于数据库类。但是,这需要我在每个类中放置凭据。另一种对我来说不那么麻烦的方法是创建一个数据库对象并将其保存在一个全局变量中。这在减少活动数据库连接的同时,使配置更容易;凭据只需设置一次


我在某个地方听说应该避免使用全局变量。最佳实践方法是什么?

我将创建一个只包含连接管理内容的基类,而不包含特定于表的内容。然后,您可以将凭据放在那里

另一种选择是在这样的基类上使用静态变量来存储凭证(而不是在函数中硬编码凭证,这有点脏)


因此
BaseDBConnection::$username
BaseDBConnection::$password
将包含凭据,而您的其他DBConnection类派生自BaseDBConnection并参考
self::$username
,等等。

我将创建一个只包含连接管理内容而不包含特定于表的基类。然后,您可以将凭据放在那里

另一种选择是在这样的基类上使用静态变量来存储凭证(而不是在函数中硬编码凭证,这有点脏)


因此
BaseDBConnection::$username
BaseDBConnection::$password
将包含凭据,而您的其他DBConnection类派生自BaseDBConnection并参考
self::$username
,等等。

您可以让其他类在其构造函数中获取数据库连接对象。这样他们就不必知道这些证件了


另一种常见的方法是使用单例进行数据库连接。本质上,这仍然是一个全局变量,但它确实意味着您可以在一个位置控制数据库对象实例化。

您可以让其他类在其构造函数中获取数据库连接对象。这样他们就不必知道这些证件了


另一种常见的方法是使用单例进行数据库连接。本质上,这仍然是一个全局变量,但它确实意味着您可以在一个位置控制数据库对象实例化。

您应该避免全局数据库对象。您的数据库应尽可能晚地打开,并尽可能早地关闭


您应该在每个类内部使用数据库对象,并且仅在需要时才打开/关闭它。

您应该避免使用全局数据库对象。您的数据库应尽可能晚地打开,并尽可能早地关闭


您应该在每个类内部使用一个数据库对象,并且应该仅在需要时打开/关闭它。

我将创建一个“配置”文件,该文件基本上将凭据存储为变量,并将其包含在所需的类文件中

这样,任何凭证更改只需要更改“配置”文件

编辑:


我忘了提到这意味着每个类中都应该实例化一个数据库类的新实例。

我将创建一个“配置”文件,基本上将凭据存储为变量,并将其包含在所需的类文件中

这样,任何凭证更改只需要更改“配置”文件

编辑:


我忘了提到这意味着数据库类的新实例应该在每个类中实例化。

如果您还没有。。。这可能会为你节省一些时间,让你可以更广泛地讨论这个话题。如果你还没有。。。可以为您节省一些时间,让您了解有关此主题的更广泛的讨论。