【发布时间】:2015-08-24 18:15:01
【问题描述】:
让其他函数访问我的数据库连接函数中的 $conn 变量
所以在这里我绝对不顾一切地试图让某些东西发挥作用。我知道我想要做的不是 OOP,也不是 100% 的最佳实践。这不是一个实时网站,我只是在 XAMPP 上学习一些基本的 PHP 概念。
我要做的是让我的数据库连接函数中的 $conn 变量可供所有其他需要它的函数访问。我正在考虑将它作为参数传递,但是如何做到这一点?我不喜欢使用 PHP 的“全局”或 $GLOBALS。我现在的工作方法是使用 mysqli 使用过程方法。
例如我有这样的事情:
function db () {
$conn = mysqli_connect ("localhost", "root", "", "database");
}
function someFunction () {
$result = mysqli_query ($conn, "SELECT * FROM examples)
}
我从来没有找到我的问题的答案...我最近熟悉的大多数解决方案都是基于 OOP 或使用一些有问题的方法。
------------------------------------------ -------------------------------------------------- --------------------------------------
解决方案 A - 我宁愿避免在包装器中不使用连接并使用全局变量:
global $conn = mysqli_connect ("localhost", "root", "", "database");
global $conn;
function someFunction () {
global $conn;
$result = mysqli_query ($conn, "SELECT * FROM examples)
}
解决方案 B - 我还没有为 OOP 做好准备,但我知道这是可行的。关键是我想学习一些不同的东西:
class Database
{
private static $conn;
public static function getObject()
{
if (!self::$conn)
self::$conn = new mysqli("localhost", "root", "", "database");
return self::$conn;
}
}
function someFunction () {
$result = mysqli_query (Database::$conn, "SELECT * FROM examples)
}
解决方案 C - 根本不使用函数...只是将其展开,从长远来看我认为这不太实用:
$conn = mysqli_connect ("localhost", "root", "", "database");
$result = mysqli_query ($conn, "SELECT * FROM examples)
------------------------------------------ -------------------------------------------------- --------------------------------------
我试图实现的解决方案:
function db () {
$conn = mysqli_connect ("localhost", "root", "", "database");
return $conn;
}
function someFunction () {
$conn = db ();
$result = mysqli_query ($conn, "SELECT * FROM examples)
}
或类似这样的东西,我只是将连接作为参数或其他东西传递(目前是伪代码)
function db () {
$conn = mysqli_connect ("localhost", "root", "", "database");
}
function someFunction ($conn) {
$result = mysqli_query ($conn, "SELECT * FROM examples)
}
------------------------------------------ -------------------------------------------------- --------------------------------------
那么我如何实现类似于最后两个但实际上有效的东西。这个概念可行吗?
【问题讨论】:
-
OOP 并不是要选择最迟钝的方法。对于您的实际使用案例,使用最省力且 API 复杂度最低的那个。过度计划你实际上没有的问题或仅仅为了一些最佳实践模因是不可取的。
-
你已经在这里展示了一个解决方案 "我正在尝试实现的解决方案:" ;为什么这对你不起作用?
标签: php