drs7798 2014-12-15 00:23
浏览 27
已采纳

数据库连接 - 单例。 如何在其中传递用户数据?

Trying to use database connection with singleton. __constructor has been private and returning instance from static function.

class MyDbConn 
{
    protected $_conn;
    protected $database;
    protected $user;
    protected $password;
    protected $host = "localhost";
         private static $instance;

         private function __construct()
         {
              $this->db_conn = new PDO("mysql:host=$this->host;dbname=$this->database",$this->user,$this->password);
              $this->db_conn->exec("set names utf8");
              $this->_conn = $this->db_conn;
         }

         public static function returnInstance() {
              if(self::$instance == null)
              {
                  print "Object  created!";
                  self::$instance = new self;

              }

               return self::$instance;

          }

           public function returnconnection(){
            return $this->_connection;
          }
     } 

Now I can access the connection instance from MyDbConn::returnInstance()->returnconnection();

But, How do I pass my users detail and database name to this constructor ?? I cannot do ::returnInstance($username,$password) or returnconnection($username,$password).

Any ideas please.

  • 写回答

2条回答 默认 最新

  • douyouchou1085 2014-12-15 01:39
    关注

    You can do it using global or with a normal function call

    <?php
    class MyDbConn 
    {
        protected $_conn;
        protected $database;
        protected $user;
        protected $password;
        protected $host = "localhost";
        private static $instance;
    
        private function __construct()
        {
    
        }
    
        public static function returnInstance() {
             if(self::$instance == null)
             {
                 print "Object  created!";
                 self::$instance = new self;
             }
              return self::$instance;
         }
    
         private static function initDatabase(){
             $database = self::returnInstance();
             global $config;
             $database->_conn = new PDO("mysql:host={$config['host']};dbname={$config['database']}",$config['user'],$config['password']);
             $database->_conn->exec("set names utf8");
             return $database;
         }
    
          public static function returnconnection(){
           try {
               $db = self::initDatabase();
               return $db->_conn;
            } catch (Exception $ex) {
               echo "Error Establishing Database Connection " . $ex->getMessage();
               return null;
            }
          }
    }
    

    and pass the data like this

    // will be called from initDatabase using global keyword
    $config = array('host' => 'localhost', 'database' => 'db name','user' => 'user here','password' => '');
    
    $db = MyDbConn::returnconnection();
    

    I don't recommend Singleton, and i suggest using Dependency Injection

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序