From 39a9eff4cb241bb26bf8907804485a935eb5dc07 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 19 Oct 2025 17:01:58 +0300 Subject: [PATCH 1/3] Fix: PHP 8.4 compatibility issues for nullable parameters and return types --- src/App/Helpers/app.php | 2 +- src/App/Helpers/dir.php | 2 +- src/Http/Traits/Request/Body.php | 2 +- src/Http/Traits/Response/Body.php | 10 +++++----- src/Libraries/Auth/Traits/AuthTrait.php | 4 ++-- src/Libraries/Database/Adapters/Idiorm/IdiormDbal.php | 2 +- .../Database/Adapters/Idiorm/Statements/Criteria.php | 4 ++-- .../Database/Adapters/Idiorm/Statements/Join.php | 2 +- .../Session/Adapters/Database/DatabaseHandler.php | 5 +++-- 9 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/App/Helpers/app.php b/src/App/Helpers/app.php index dd20b03e9..45efc1539 100644 --- a/src/App/Helpers/app.php +++ b/src/App/Helpers/app.php @@ -21,7 +21,7 @@ * @return mixed * @throws StopExecutionException */ -function stop(Closure $closure = null, ?int $code = 0) +function stop(?Closure $closure = null, ?int $code = 0) { if ($closure) { $closure(); diff --git a/src/App/Helpers/dir.php b/src/App/Helpers/dir.php index 606f61e44..ff4189550 100644 --- a/src/App/Helpers/dir.php +++ b/src/App/Helpers/dir.php @@ -46,7 +46,7 @@ function framework_dir(): string * @param string|null $moduleDir * @return string */ -function modules_dir(string $moduleDir = null): string +function modules_dir(?string $moduleDir = null): string { return $moduleDir ?? App::getBaseDir() . DS . 'modules'; } diff --git a/src/Http/Traits/Request/Body.php b/src/Http/Traits/Request/Body.php index c6304fd8e..15e581fae 100644 --- a/src/Http/Traits/Request/Body.php +++ b/src/Http/Traits/Request/Body.php @@ -47,7 +47,7 @@ public static function has(string $key): bool * @param bool $raw * @return mixed */ - public static function get(string $key, string $default = null, bool $raw = false) + public static function get(string $key, ?string $default = null, bool $raw = false) { if(!self::has($key)) { return $default; diff --git a/src/Http/Traits/Response/Body.php b/src/Http/Traits/Response/Body.php index 4b0d47439..42bf987a3 100644 --- a/src/Http/Traits/Response/Body.php +++ b/src/Http/Traits/Response/Body.php @@ -60,7 +60,7 @@ public static function has(string $key): bool * @param string|null $default * @return mixed */ - public static function get(string $key, string $default = null) + public static function get(string $key, ?string $default = null) { return self::has($key) ? self::$__response[$key] : $default; } @@ -100,7 +100,7 @@ public static function delete(string $key) * @param array|null $data * @param int|null $code */ - public static function json(array $data = null, int $code = null) + public static function json(?array $data = null, ?int $code = null) { self::setContentType(ContentType::JSON); @@ -119,7 +119,7 @@ public static function json(array $data = null, int $code = null) * @param array|null $data * @param int|null $code */ - public static function jsonp(string $callback, ?array $data = null, int $code = null) + public static function jsonp(string $callback, ?array $data = null, ?int $code = null) { self::setContentType(ContentType::JSONP); @@ -149,7 +149,7 @@ public static function getJsonPData(array $data): string * @param array|null $data * @param int|null $code */ - public static function xml(array $data = null, $root = '', int $code = null) + public static function xml(?array $data = null, $root = '', ?int $code = null) { self::setContentType(ContentType::XML); @@ -169,7 +169,7 @@ public static function xml(array $data = null, $root = '', int $cod * @param string $html * @param int|null $code */ - public static function html(string $html, int $code = null) + public static function html(string $html, ?int $code = null) { self::setContentType(ContentType::HTML); diff --git a/src/Libraries/Auth/Traits/AuthTrait.php b/src/Libraries/Auth/Traits/AuthTrait.php index 1afc90723..6e9701598 100644 --- a/src/Libraries/Auth/Traits/AuthTrait.php +++ b/src/Libraries/Auth/Traits/AuthTrait.php @@ -92,7 +92,7 @@ public function check(): bool * @param array|null $customData * @return User */ - public function signup(array $userData, array $customData = null): User + public function signup(array $userData, ?array $customData = null): User { $activationToken = $this->generateToken(); @@ -342,7 +342,7 @@ protected function isActivated(User $user): bool * @param string|null $val * @return string */ - protected function generateToken(string $val = null): string + protected function generateToken(?string $val = null): string { return base64_encode($this->hasher->hash($val ?: config()->get('app.key'))); } diff --git a/src/Libraries/Database/Adapters/Idiorm/IdiormDbal.php b/src/Libraries/Database/Adapters/Idiorm/IdiormDbal.php index fbbb1c202..a0eb02688 100644 --- a/src/Libraries/Database/Adapters/Idiorm/IdiormDbal.php +++ b/src/Libraries/Database/Adapters/Idiorm/IdiormDbal.php @@ -146,7 +146,7 @@ class IdiormDbal implements DbalInterface, RelationalInterface */ public function __construct( string $table, - string $modelName = null, + ?string $modelName = null, string $idColumn = 'id', array $foreignKeys = [], array $hidden = [] diff --git a/src/Libraries/Database/Adapters/Idiorm/Statements/Criteria.php b/src/Libraries/Database/Adapters/Idiorm/Statements/Criteria.php index 32f988434..f8e1a87a9 100644 --- a/src/Libraries/Database/Adapters/Idiorm/Statements/Criteria.php +++ b/src/Libraries/Database/Adapters/Idiorm/Statements/Criteria.php @@ -59,7 +59,7 @@ public function criterias(...$criterias): DbalInterface * @inheritDoc * @throws DatabaseException */ - public function having(string $column, string $operator, string $value = null): DbalInterface + public function having(string $column, string $operator, ?string $value = null): DbalInterface { if (!key_exists($operator, $this->operators)) { throw DatabaseException::operatorNotSupported($operator); @@ -98,7 +98,7 @@ public function isNotNull(string $column): DbalInterface * @param string|null $func * @throws DatabaseException */ - protected function addCriteria(string $column, string $operator, $value, string $func = null) + protected function addCriteria(string $column, string $operator, $value, ?string $func = null) { if ($operator == '#=#') { $this->getOrmModel()->where_raw($column . ' = ' . $value); diff --git a/src/Libraries/Database/Adapters/Idiorm/Statements/Join.php b/src/Libraries/Database/Adapters/Idiorm/Statements/Join.php index 932346769..c467c36ea 100644 --- a/src/Libraries/Database/Adapters/Idiorm/Statements/Join.php +++ b/src/Libraries/Database/Adapters/Idiorm/Statements/Join.php @@ -31,7 +31,7 @@ trait Join * @inheritDoc * @throws DatabaseException */ - public function join(string $table, array $constraint, string $tableAlias = null): DbalInterface + public function join(string $table, array $constraint, ?string $tableAlias = null): DbalInterface { $this->getOrmModel()->join($table, $constraint, $tableAlias); return $this; diff --git a/src/Libraries/Session/Adapters/Database/DatabaseHandler.php b/src/Libraries/Session/Adapters/Database/DatabaseHandler.php index c9909ffb2..1b940d29d 100644 --- a/src/Libraries/Session/Adapters/Database/DatabaseHandler.php +++ b/src/Libraries/Session/Adapters/Database/DatabaseHandler.php @@ -104,9 +104,10 @@ public function destroy($id): bool /** * @inheritDoc */ - public function gc($max_lifetime): bool + public function gc($max_lifetime): int|false { $old = time() - $max_lifetime; - return $this->sessionModel->criteria('ttl', '<', $old)->deleteMany(); + $deleted = $this->sessionModel->criteria('ttl', '<', $old)->deleteMany(); + return $deleted !== false ? $deleted : false; } } \ No newline at end of file From f6407e42cc508b066f80cda8cfbfff148a51b8fd Mon Sep 17 00:00:00 2001 From: William Date: Mon, 20 Oct 2025 17:52:51 +0300 Subject: [PATCH 2/3] Fix gc() method return type compatibility with SessionHandlerInterface --- src/Libraries/Session/Adapters/Database/DatabaseHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Libraries/Session/Adapters/Database/DatabaseHandler.php b/src/Libraries/Session/Adapters/Database/DatabaseHandler.php index 1b940d29d..7382b098b 100644 --- a/src/Libraries/Session/Adapters/Database/DatabaseHandler.php +++ b/src/Libraries/Session/Adapters/Database/DatabaseHandler.php @@ -108,6 +108,6 @@ public function gc($max_lifetime): int|false { $old = time() - $max_lifetime; $deleted = $this->sessionModel->criteria('ttl', '<', $old)->deleteMany(); - return $deleted !== false ? $deleted : false; + return $deleted === false ? false : (int)$deleted; } } \ No newline at end of file From 11a8633564923e72d09238ee6d1d5e4032d6cf68 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 21 Oct 2025 16:34:21 +0300 Subject: [PATCH 3/3] Revert gc() method to bool return type and add ReturnTypeWillChange attribute for PHP version compatibility --- src/Libraries/Session/Adapters/Database/DatabaseHandler.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Libraries/Session/Adapters/Database/DatabaseHandler.php b/src/Libraries/Session/Adapters/Database/DatabaseHandler.php index 7382b098b..b4b85a48e 100644 --- a/src/Libraries/Session/Adapters/Database/DatabaseHandler.php +++ b/src/Libraries/Session/Adapters/Database/DatabaseHandler.php @@ -104,10 +104,10 @@ public function destroy($id): bool /** * @inheritDoc */ - public function gc($max_lifetime): int|false + #[\ReturnTypeWillChange] + public function gc($max_lifetime): bool { $old = time() - $max_lifetime; - $deleted = $this->sessionModel->criteria('ttl', '<', $old)->deleteMany(); - return $deleted === false ? false : (int)$deleted; + return $this->sessionModel->criteria('ttl', '<', $old)->deleteMany(); } } \ No newline at end of file