PDO::CASE_NATURAL, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, PDO::ATTR_STRINGIFY_FETCHES => false, PDO::ATTR_EMULATE_PREPARES => false, ]; public static function init(IDbConnectionInfo $connInfo) { if(!($connInfo instanceof MariaDBConnectionInfo)) throw new InvalidArgumentException('$connInfo must be an instance of MariaDBConnectionInfo (only mariadb/mysql is supported).'); $dsn = 'mysql:'; if($connInfo->isUnixSocket()) $dsn .= 'unix_socket=' . $connInfo->getSocketPath() . ';'; else { $dsn .= 'host=' . $connInfo->getHost() . ';'; $dsn .= 'port=' . $connInfo->getPort() . ';'; } $dsn .= 'dbname=' . $connInfo->getDatabaseName() . ';'; if($connInfo->hasCharacterSet()) $dsn .= 'charset=' . $connInfo->getCharacterSet() . ';'; self::$instance = new Database($dsn, $connInfo->getUserName(), $connInfo->getPassword(), self::ATTRS); } public static function __callStatic(string $name, array $args) { return self::$instance->{$name}(...$args); } public static function getInstance(): Database { return self::$instance; } }