2014-06-24 4 views
1

이것은 내 DB 클래스입니다. (DB.php)함수 내부에서 DB 클래스의 인스턴스를 사용하는 방법은 무엇입니까?

<?php 

    class DB { 
     protected $db_name = "data_db"; 
     protected $db_user = "root"; 
     protected $db_pass = "root"; 
     protected $db_host = "localhost"; 

     public function __construct() { 
      $this->mysqli = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name); 
     } 

     public function __destruct() { 
      $this->mysqli->close(); 
     } 
    } 

?> 

이것은 내 users.php 파일입니다.

<?php 

    require_once "core/DB.php"; 

     function user_data() { 
      global $db; 
      $db = new DB(); 
      $data = array(); 
      $session_user_id = $_SESSION["user_id"]; 
      $data_row = $db->mysqli->query("SELECT * FROM `users` WHERE `user_id` = '$session_user_id'"); 
      $data = $data_row->fetch_assoc(); 
      return $data; 
    } 
?> 

내 함수 내에서 DB 클래스의 $ db 인스턴스를 어떻게 사용할 수 있습니까? 인스턴스를 한 번만 호출하고 전역 변수로 사용하여 모든 함수에서 사용할 수 있습니까?

+1

[Singleton 디자인 패턴] (http://coderoncode.com/2014/01/27/design-patterns-php-singletons.html) – Danijel

+0

감사합니다. @Danijel. – rexhin

답변

2

pleeeeaaase 단지에 DB::getInstance()를 호출이 방법보다

function user_data() { 
    $db = DB::getInstance(); 
    $data = array(); 
    $session_user_id = $_SESSION["user_id"]; 
    $data_row = $db->mysqli->query("SELECT * FROM `users` WHERE `user_id` = '$session_user_id'"); 
    $data = $data_row->fetch_assoc(); 
    return $data; 
} 

를 사용할 수 있습니다 싱글 톤 패턴을 사용하여 기능에

class DB { 
    protected $db_name = "data_db"; 
    protected $db_user = "root"; 
    protected $db_pass = "root"; 
    protected $db_host = "localhost"; 

    public static function getInstance() 
    { 
     static $instance = null; 

     if (is_null($instance)) { 
      $instance = new DB(); 
     } 

     return $instance; 
    } 

    public function __construct() { 
     $this->mysqli = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name); 
    } 

    public function __destruct() { 
     $this->mysqli->close(); 
    } 
} 

을 시도해 전역 변수

를 사용하지 않는 항상 같은 시간에 수업을 들으십시오

+0

감사합니다. 나는이 대답을 좋아한다. :) – rexhin

관련 문제