2010-05-05 6 views
0

자,이게 이상 해요 !!! 아래 코드를 실행하면 인스턴스화되지 않은 객체의 치명적인 오류가 발생하지만 PHP 버전 5.1.6을 실행하고 있습니다. 이 코드 줄을 주석 해제하자마자 // $ cb_db = new cb_db (USER, PASSWORD, NAME, HOST); 모든 것이 작동합니다. 메서드 내에서 전역으로 $ cb_db 개체를 선언 했음에도 불구하고. 어떤 도움이라도 대단히 감사하겠습니다.비 객체에서 member 함수 query()를 호출하십시오.

require_once (ROOT_CB_CLASSES. 'db.php');

$cb_db = new cb_db(USER, PASSWORD, NAME, HOST); 

class cb_user { 
    protected function find_by_sql($sql) { 
     global $cb_db; 

     //$cb_db = new cb_db(USER, PASSWORD, NAME, HOST); 
     $result_set = $cb_db->query($sql); 

     $object_array = array(); 
     while($row = $cb_db->fetch_array($result_set)) { 
      $object_array[] = self::instantiate($row); 
     } 
     return $object_array; 
    } 
} 
+1

왜 수업에서 글로벌을 사용 하시겠습니까? 확장이 훨씬 더 적절하게 보이면 매개 변수로 객체를 전달할 수도 있습니다 ... – Dormilich

+0

클래스를 사용하여 전역을 제거하지 않았습니까? –

답변

2

당신이 (대신 생성자를 통해 연결을 전달하는) 전역을 사용하려는 경우, 당신이 글로벌 에드 당신이 그것을 사용하려는 두 곳 모두 있는지 확인해야한다.

Global $cb_db; 
$cb_db = new cb_db(USER, PASSWORD, NAME, HOST); 

class cb_user { 
    protected function find_by_sql($sql) { 
     global $cb_db; 

     //$cb_db = new cb_db(USER, PASSWORD, NAME, HOST); 
     $result_set = $cb_db->query($sql); 

     $object_array = array(); 
     while($row = $cb_db->fetch_array($result_set)) { 
      $object_array[] = self::instantiate($row); 
     } 
     return $object_array; 
    } 
} 

는 그러나, 나는 생성자를 통해 데이터베이스 연결을 전달하여 것이이 작업을 수행 할 수있는 더 좋은 방법을 생각합니다. 이 연결을 사용하는 유일한 기능 것을 발견 할 경우

$cb_db = new cb_db(USER, PASSWORD, NAME, HOST); 
$cb_user = new cb_user($cb_db); 

class cb_user { 
    public __construct(cb_db $database) 
    { 
     $this->database = $database 
    } 

    protected function find_by_sql($sql) { 

     $this->database = new cb_db(USER, PASSWORD, NAME, HOST); 
     $result_set = $cb_db->query($sql); 

     $object_array = array(); 
     while($row = $cb_db->fetch_array($result_set)) { 
      $object_array[] = self::instantiate($row); 
     } 
     return $object_array; 
    } 
} 

또한 개별 기능 (find_by_sql($sql, $cb_db))에에 전달할 수 있습니다.

관련 문제