2013-09-06 5 views
0

데이터베이스에서 데이터를 가져 와서 해당 데이터를 기반으로 개체를 만드는 클래스를 작성하려고합니다. 나는 CodeIgniter와 함께 일하고있다.PHP는 __construct에서 NULL을 반환합니다.

문제는 있지만 그 NULL 설정된 모든 속성을 갖는 id__construct 방법에 공급되지만, 데이터베이스 테이블에 행 id는 객체가 반환되는 경우가 없다.

확인할 수 있으며 해당 행이없는 경우 객체 대신 NULL을 반환하는 방법이 있습니까?

class JS_Model extends CI_Model 
{ 
    protected $database_table_name; 
    protected $database_keys; 
    ... 

    public function __construct($id = NULL){ 
     if($id){ 
      $this->getFromDatabase($id); 
     } 
    } 

    ... 

    function getFromDatabase($id){ 
     foreach($this->database_keys as $key){ 
      $this->db->select($key); 
     } 
     $this->db->from($this->database_table_name); 
     $this->db->where('id', $id); 
     $this->db->limit(1); 
     $q = $this->db->get(); 

     if ($q->num_rows() > 0){ 
      foreach($q->result() as $property){  
       foreach($property as $key => $value){ 
        $this->$key = $value; 
       } 
      } 
     } else { 
      // NEED TO SET THE OBJECT TO NULL FOR THIS CASE 
     } 
    } 

    ... 

} 

어떤 도움을 주시면 감사하겠습니다.

답변

4

__construct이 호출되면 불가능합니다. 개체 인스턴스가 수신됩니다.

올바르게 처리하려면 Exception을 생성자 내부에서 던져야합니다.

class JS_Model extends CI_Model 
{ 
    protected $database_table_name; 
    protected $database_keys; 

    public function __construct($id = NULL){ 
     if($id){ 
      $row = $this->getFromDatabase($id); 
      if (!$row) { 
       throw new Exception('requested row not found'); 
      } 
     } 
    } 
} 

try { 
    $record = new JS_Model(1); 
} catch (Exception $e) { 
    echo "record could not be found"; 
} 
// from here on out, we can safely assume $record holds a valid record 
+0

Beautiful. 감사합니다! – Josh

1

왜 생성자를 비공개로 설정하고 GetInstance()와 같은 메서드를 사용합니까? 이 같은. 더 이상 PHP를 쓰지 않아서 구문이 올바르지 않을 수도 있습니다.

class JS_Model extends CI_Model 
{ 
protected $database_table_name; 
protected $database_keys; 
... 

private function __construct($id = NULL){ 

} 
public static function GetInstance($id) 
{ 
    $x = new JS_Model($id); 
    $x->getFromDatabase($id); 
    if(is_object($x)) 
    { 
    return $x; 
    } 
    return null; 

} 
... 

function getFromDatabase($id){ 
    foreach($this->database_keys as $key){ 
     $this->db->select($key); 
    } 
    $this->db->from($this->database_table_name); 
    $this->db->where('id', $id); 
    $this->db->limit(1); 
    $q = $this->db->get(); 

    if ($q->num_rows() > 0){ 
     foreach($q->result() as $property){  
      foreach($property as $key => $value){ 
       $this->$key = $value; 
      } 
     } 
    } else { 
     return null; 
    } 
} 

... 

} 
관련 문제