2011-09-03 6 views
0

방금 ​​php 양식 mysql을 업그레이드하여 객체 지향 접근 방식으로 mysqli를 사용했습니다. 나는이 코드에 버그가 있다고 믿을만한 이유가있다. 내 목표는 스크립트 실행 당 단 하나의 데이터베이스 연결을 보장하기 위해 단일 패턴을 사용하는 것입니다. $ db는 데이터베이스 링크를 보유합니다. 구문 - 클래스의 속성 메소드에 접근하기

누군가는 구문이 떨어져 보이는 라인

return $one->$db->query($query); 

를 확인할 수 있습니다. 당신의 싱글 톤 패턴이 정확하지 않은 적이

class one 
{ 
    private static $single = NULL; 
    public $db = NULL; 
    public function __construct() 
    { 
     $this->db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE); 
     self::$single=1; 
    } 
    public static function make_one() 
    { 
     if(self::$single==NULL) 
     { 
      return new self(); 
     } 
    } 
} 


/*database*/ 

class database 
{ 
    public function __construct() 
    { 
     one::make_one(); 
    } 
    public static function arche_query($query) 
    { 
     return $one->$db->query($query); 
    } 
} 
+0

왜 클래스를 하나 개의 인스턴스를 생성하는 방법 하나는 데이터베이스 연결이 아니라 데이터베이스 클래스가 있습니까? 1 개의 클래스에서 모든 코드를 옮길 수 있습니까? –

+0

http://www.php.net/manual/en/language.oop5.patterns.php – dqhendricks

답변

1

변경이

return one::make_one->db->query($query); 

에 싱글 톤 패턴은없는 경우 귀하의 경우,

class one 
    { 
    private static $_selfInstace; 
    public $db;// default is null so no need to assign 
    public function __construct() 
    { 
    $this->db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE); 
    } 
    public static function getInstance() 
    { 
     if(!(self::$_selfInstace instanceof self)) { 
      self::$_selfInstace= new self(); 
     } 
     return self::$_selfInstace; 
    } 
    } 

class database 
    { 
    public function __construct() 
    { 
    } 
    public static function arche_query($query) 
    { 
    return one::getInstance()->db->query($query); 
    } 
    } 
+0

PHP에서 구문 오류가 발생합니다. 예기치 않은 T_OBJECT_OPERATOR D : \ xampplite \ htdocs \ archemarks \ p0에서 구문 오류가 발생합니다. .php on line 46 –

+0

@chris : '한'인스턴스가 'NULL'이 아닌 경우 어떻게됩니까? –

+0

T_OBJECT_OPERATOR 반환 $ 1 -> $ db-> query ($ query); $ 하나는 객체가 아닙니다. –

관련 문제