gpt4 book ai didi

php - 将数据库连接/对象放入 PHP 函数中的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-10-31 22:08:46 25 4
gpt4 key购买 nike

几个选项是:

$connection = {my db connection/object};

function PassedIn($connection) { ... }

function PassedByReference(&$connection) { ... }

function UsingGlobal() {
global $connection;
...
}

所以,传入,通过引用传递,或者使用全局。我正在考虑仅在 1 个项目中使用的函数,这些项目将只有 1 个数据库连接。如果有多个连接,则明确传入或引用传递。

我认为当您在 PHP5 中使用对象时不需要通过引用传递,因此传入或使用全局是两种可能性。

我问的原因是因为我厌倦了总是将 $connection 放入我的函数参数中。

最佳答案

我使用 Singleton ResourceManager 类来处理整个应用程序中的数据库连接和配置设置等内容:

class ResourceManager {
private static $DB;
private static $Config;

public static function get($resource, $options = false) {
if (property_exists('ResourceManager', $resource)) {
if (empty(self::$$resource)) {
self::_init_resource($resource, $options);
}
if (!empty(self::$$resource)) {
return self::$$resource;
}
}
return null;
}

private static function _init_resource($resource, $options = null) {
if ($resource == 'DB') {
$dsn = 'mysql:host=localhost';
$username = 'my_username';
$password = 'p4ssw0rd';
try {
self::$DB = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
} elseif (class_exists($resource) && property_exists('ResourceManager', $resource)) {
self::$$resource = new $resource($options);
}
}
}

然后在函数/对象/任何地方:

function doDBThingy() {
$db = ResourceManager::get('DB');
if ($db) {
$stmt = $db->prepare('SELECT * FROM `table`');
etc...
}
}

我用它来存储消息、错误消息和警告,以及全局变量。有一个有趣的问题here关于何时实际使用此类类。

关于php - 将数据库连接/对象放入 PHP 函数中的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com