【发布时间】:2021-12-27 22:42:21
【问题描述】:
我创建了这段代码,我在其中创建了一个数据库实例并使用它。现在我正在尝试将代码转换为静态形式,但我不能。
$pdo = new PDO('sqlite:src/chinook.db');
$sql = "CREATE TABLE IF NOT EXISTS uzivatele(
uzivatelId INTEGER PRIMARY KEY,
jmeno TEXT,
prijmeni TEXT,
body INTEGER
);";
$statement = $pdo->prepare($sql);
$statement->execute();
function dropTable($pdo,$name)
{
$sql = "DROP TABLE $name";
$statement = $pdo->prepare($sql);
$statement->execute();
}
...
静态 这就是我为 pdo 实现类的方式(根据手册),我想实现静态方法,例如 createTable,但我无法重做
class Db
{
protected static $pdo = null;
public static function get(): \PDO
{
return self::$pdo ?? (self::$pdo = new \PDO(
'sqlite:hw-06.db',
null,
null,
[
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
]
));
}
}
use App\Db;
class Account
{
...
public static function createTable(): void
{
$db = Db::get();
$sql = "CREATE TABLE IF NOT EXISTS uzivatele(
uzivatelId INTEGER PRIMARY KEY,
jmeno TEXT,
prijmeni TEXT,
body INTEGER
);";
$statement = $db->prepare($sql);
$statement->execute();
}
index.php 帐户::createTable();
【问题讨论】:
-
“我不能重做”是什么意思?你遇到了什么问题?
-
重点是我不能把第一个版本转成静态版本
-
为什么不呢?再说一遍,你遇到了什么问题?
-
您不能也不应该尝试将 PDO 方法更改为静态。您上面的代码应该可以正常工作。使用 PDO 时,您必须有一个实际的实例
-
这正是您的
Db类所做的,将PDO实例作为singleton 提供。你的问题真的不清楚。我已经问了两次你遇到了什么问题,除了猜测之外,你没有提供任何细节。我建议你先写一些代码,如果你有具体问题再回来