PHP Uncaught Error: Call to a member function prepare() on null

Ошибка

Fatal error: Uncaught Error: Call to a member function prepare() on null in E:\IT\OpenServer\domains\bookshop\application\lib\Db.php:26 Stack trace: #0 E:\IT\OpenServer\domains\bookshop\application\lib\Db.php(31): application\lib\Db::prepare() #1 E:\IT\OpenServer\domains\bookshop\application\lib\Db.php(39): application\lib\Db::run() #2 E:\IT\OpenServer\domains\bookshop\application\models\Account.php(10): application\lib\Db::sql() #3 E:\IT\OpenServer\domains\bookshop\application\controllers\AccountController.php(31): application\models\Account::addUser() #4 E:\IT\OpenServer\domains\bookshop\application\core\Router.php(58): application\controllers\AccountController->signupAction() #5 E:\IT\OpenServer\domains\bookshop\index.php(16): application\core\Router->run() #6 {main} thrown in E:\IT\OpenServer\domains\bookshop\application\lib\Db.php on line 26

Db.php

<?php

namespace application\lib;
use PDO;

class Db
{
    public static $db;

    public function __construct() {
        $config = require 'application/config/db.php';
        try {
            self::$db = new PDO(
                'pgsql:host=' .     $config['host'] . SPACE .
                'port='       .     $config['port'] . SPACE .
                'dbname='     .     $config['dbname'] . SPACE .
                'user='       .     $config['user'] . SPACE .
                'password='   .     $config['password']
            );
        } catch (\Exception $e) {
            echo $e->getMessage();
        }
    }

    public static function query($stmt) {return self::$db->query($stmt);}
    public static function prepare($stmt) {return self::$db->prepare($stmt);}
    public static function exec($query) {return self::$db->exec($query);}

    public static function run($query, $args = []) {
            if(!$args) {return self::query($query);}
            $stmt = self::prepare($query);
            $stmt->execute($args);
            return $stmt; 
    }
    
    public static function GetRow($query, $args = []) {return self::run($query, $args)->fetch();}
    public static function GetRows($query, $args = []) {return self::run($query, $args)->fetchAll();}
    public static function GetColumn($query, $args = []) {return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);}
    public static function sql($query, $args = []) {self::run($query, $args);}

}

Account.php (обращаюсь к бд)

<?php

namespace application\models;
use application\core\Model;
use application\lib\Db;
class Account //extends Model
{
    public static function addUser($nickname, $login, $password, $email) {
        Db::sql("INSERT INTO users (nickname, login, password, email) 
            VALUES (?, ?, ?, ?)", [$nickname, $login, $password, $email]);
    }
}

Ответы (1 шт):

Автор решения: Joe Ford

public static function prepare($stmt) {return self::$db->prepare($stmt);} - здесь self::$db будет будет null

создавай объект класса Db в функции addUser или переделай класс Db под singleton

→ Ссылка