diff --git a/exam/api/index.php b/exam/api/index.php index 48d4cf4..641ba97 100644 --- a/exam/api/index.php +++ b/exam/api/index.php @@ -16,7 +16,7 @@ use Pecee\SimpleRouter\Handlers\EventHandler; use Pecee\SimpleRouter\Event\EventArgument; use Pecee\SimpleRouter\Route\ILoadableRoute; use Pecee\SimpleRouter\Route\IGroupRoute; -use Config\Config; +use Khofmann\Config\Config; // Router base path $basePath = Config::getBasePath() . "api"; // Router event handler for prepending base path diff --git a/exam/config/Config.php b/exam/classes/Config/Config.php similarity index 73% rename from exam/config/Config.php rename to exam/classes/Config/Config.php index 2d866e2..544c280 100644 --- a/exam/config/Config.php +++ b/exam/classes/Config/Config.php @@ -1,6 +1,6 @@ app = require_once __DIR__ . "/app.php"; - $this->database = require_once __DIR__ . "/database.php"; + $this->app = require_once __DIR__ . "/../../config/app.php"; + $this->database = require_once __DIR__ . "/../../config/database.php"; } - protected function __clone() + private function __clone() { + throw new Exception("Cannot clone a singleton."); } - public function __wakeup() + private function __wakeup() { throw new Exception("Cannot unserialize a singleton."); } diff --git a/exam/classes/Database/Database.php b/exam/classes/Database/Database.php index 714ee92..31b88c8 100644 --- a/exam/classes/Database/Database.php +++ b/exam/classes/Database/Database.php @@ -3,17 +3,28 @@ namespace Khofmann\Database; use PDO; -use Config\Config; +use Khofmann\Config\Config; +use Exception; class Database extends PDO { private static array $instances = []; - protected function __construct(string $dsn, string $username = null, string $password = null, array $options = null) + private function __construct(string $dsn, string $username = null, string $password = null, array $options = null) { parent::__construct($dsn, $username, $password, $options); } + private function __clone() + { + throw new Exception("Cannot clone a singleton."); + } + + private function __wakeup() + { + throw new Exception("Cannot unserialize a singleton."); + } + public static function getInstance(): Database { $cls = static::class; diff --git a/exam/classes/GUID/GUID.php b/exam/classes/GUID/GUID.php index c1df4af..8d42287 100644 --- a/exam/classes/GUID/GUID.php +++ b/exam/classes/GUID/GUID.php @@ -4,6 +4,10 @@ namespace Khofmann\GUID; class GUID { + private function __construct() + { + } + public static function v4($data = null): string { // Generate 16 bytes (128 bits) of random data or use the data passed into the function. diff --git a/exam/classes/Input/Input.php b/exam/classes/Input/Input.php index 29236f3..7e57e43 100644 --- a/exam/classes/Input/Input.php +++ b/exam/classes/Input/Input.php @@ -6,6 +6,10 @@ use Khofmann\Request\Request; class Input { + private function __construct() + { + } + public static function post(string $index, $defaultValue = null) { $value = Request::request()->getInputHandler()->post($index, $defaultValue); diff --git a/exam/classes/Models/Post/Post.php b/exam/classes/Models/Post/Post.php index 5f1a9e5..9e4525e 100644 --- a/exam/classes/Models/Post/Post.php +++ b/exam/classes/Models/Post/Post.php @@ -21,7 +21,7 @@ class Post implements JsonSerializable private string $content; private DateTime $postedAt; - public function __construct(int $id, ?User $user, ?string $name, string $content, string $postedAt) + private function __construct(int $id, ?User $user, ?string $name, string $content, string $postedAt) { $this->id = $id; $this->user = $user; diff --git a/exam/classes/Models/User/User.php b/exam/classes/Models/User/User.php index 220bb22..1f038ad 100644 --- a/exam/classes/Models/User/User.php +++ b/exam/classes/Models/User/User.php @@ -6,7 +6,7 @@ use Exception; use PDO; use DateTime; use Khofmann\Database\Database; -use Config\Config; +use Khofmann\Config\Config; use JsonSerializable; use Khofmann\ApiError\ApiError; use Khofmann\GUID\GUID; @@ -23,7 +23,7 @@ class User implements JsonSerializable private DateTime $memberSince; private int $postCount; - protected function __construct(int $id, string $username, int $status, string $email, string $timestamp, ?string $image, bool $isAdmin, int $postCount) + private function __construct(int $id, string $username, int $status, string $email, string $timestamp, ?string $image, bool $isAdmin, int $postCount) { $this->id = $id; $this->username = $username; diff --git a/exam/classes/Request/Request.php b/exam/classes/Request/Request.php index f018e02..78ccc0e 100644 --- a/exam/classes/Request/Request.php +++ b/exam/classes/Request/Request.php @@ -7,6 +7,10 @@ use Pecee\SimpleRouter\SimpleRouter; class Request { + private function __construct() + { + } + public static function request(): PRequest { return SimpleRouter::request(); diff --git a/exam/classes/Response/Response.php b/exam/classes/Response/Response.php index 8093953..ec26bc8 100644 --- a/exam/classes/Response/Response.php +++ b/exam/classes/Response/Response.php @@ -7,6 +7,10 @@ use Pecee\Http\Response as PResponse; class Response { + private function __construct() + { + } + public static function response(): PResponse { return SimpleRouter::response();