一切皆为插件的开发者工具运行时框架
🧩 核心特性:
- 插件热插拔 (importlib 动态加载)
- 依赖自动解析 (拓扑排序 + 循环检测)
- 企业级稳定 (熔断/降级/重试/隔离)
- 事件驱动 (发布/订阅事件总线)
- 完整配置 (YAML 配置 + 热重载)
48 lines
1.4 KiB
PHP
48 lines
1.4 KiB
PHP
<?php
|
||
class Database {
|
||
private static $instance = null;
|
||
private $pdo;
|
||
|
||
private function __construct() {
|
||
$config = require __DIR__ . '/../config.php';
|
||
|
||
// 如果配置了 socket,使用 socket 连接
|
||
if (isset($config['socket'])) {
|
||
$dsn = "mysql:unix_socket={$config['socket']};dbname={$config['dbname']};charset={$config['charset']}";
|
||
} else {
|
||
$dsn = "mysql:host={$config['host']};port={$config['port']};dbname={$config['dbname']};charset={$config['charset']}";
|
||
}
|
||
|
||
$this->pdo = new PDO($dsn, $config['username'], $config['password'], [
|
||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||
PDO::ATTR_EMULATE_PREPARES => false,
|
||
]);
|
||
}
|
||
|
||
public static function getInstance() {
|
||
if (self::$instance === null) {
|
||
self::$instance = new self();
|
||
}
|
||
return self::$instance;
|
||
}
|
||
|
||
public function query($sql, $params = []) {
|
||
$stmt = $this->pdo->prepare($sql);
|
||
$stmt->execute($params);
|
||
return $stmt;
|
||
}
|
||
|
||
public function fetchAll($sql, $params = []) {
|
||
return $this->query($sql, $params)->fetchAll();
|
||
}
|
||
|
||
public function fetchOne($sql, $params = []) {
|
||
return $this->query($sql, $params)->fetch();
|
||
}
|
||
|
||
public function lastInsertId() {
|
||
return $this->pdo->lastInsertId();
|
||
}
|
||
}
|