Creating a globally accessible MySQLi object

前端 未结 3 1160
清歌不尽
清歌不尽 2021-01-04 09:40

I have multiple classes that use static methods. These functions connect to the database using

$mysqli = new mysqli(DB_SERVER, DB_USER, DB_P         


        
相关标签:
3条回答
  • 2021-01-04 10:26

    Here is one approach:

    Create a singleton class, that can be accessed statically from anywhere.

    class DBConnector {
        private static $instance ;
        public function __construct($host, $user, $password, $db){
          if (self::$instance){
            exit("Instance on DBConnection already exists.") ;
          }
        }
    
        public static function getInstance(){
          if (!self::$instance){
            self::$instance = new DBConnector(a,b,c,d) ;
          }
          return $instance ;
        }
    }
    

    An example would be:

    $mysqli = DBConnector::getInstance() ;
    

    Hovewer I suggest using another solution as well:

    $mysqli = new MySQLi(a,b,c,d) ;
    

    Then you could pass that object to other classes (constructor)

    class Shop {
      private $mysqli ;
      public function __construct(MySQLi $mysqli){
        $this->mysqli = $mysqli ;
      }
    }
    
    $show = new Shop($mysqli) ;
    
    0 讨论(0)
  • 2021-01-04 10:30

    To elaborate on a mysqli singleton:

    define('SERVER', 'localhost');
    define('USERNAME', 'root');
    define('PASSWORD', 'password');
    define('DATABASE', 'databaseName');
    
    class mysqliSingleton
    {
        private static $instance;
        private $connection;
    
        private function __construct()
        {
            $this->connection = new mysqli(SERVER,USERNAME,PASSWORD,DATABASE);
        }
    
        public static function init()
        {
            if(is_null(self::$instance))
            {
                self::$instance = new mysqliSingleton();
            }
    
            return self::$instance;
        }
    
    
        public function __call($name, $args)
        {
            if(method_exists($this->connection, $name))
            {
                 return call_user_func_array(array($this->connection, $name), $args);
            } else {
                 trigger_error('Unknown Method ' . $name . '()', E_USER_WARNING);
                 return false;
            }
        }
    }
    

    You can then request the database connection by calling:

    $db = mysqliSingleton::init();
    

    You can then retrieve the database connection in your own objects:

    class yourClass
    {
        protected $db;
    
        public function __construct()
        {
            $this->db = mysqliSingleton::init();
        }
    }
    
    0 讨论(0)
  • 2021-01-04 10:42

    This is the shortest version I could come up with for Bootstrap 3.

       $(document).ready(function() {
            if (hash = window.location.hash) {
                $('.nav-tabs a[href="' + hash + '"]').tab('show');
            }
        });
    
    0 讨论(0)
提交回复
热议问题