2012-06-06 3 views
1

그래서 모든 데이터베이스 요청을 처리 할 데이터베이스 클래스를 만들었습니다. 모든 것은 생성자를 거치며 값을 반환해야합니다.PHP PDO 커스텀 클래스가 객체를 돌려주고 어떤 객체를 반환하지 않았습니까?

이 클래스는 너무

<?php 

class Database { 

    /** 
    * This array holds all of the configuration settings for the database 
    * @var array 
    */ 
    private $config = array(
     'username' => '', 
     'password' => '', 
     'host'  => '', 
     'database' => '' 
    ); 

    /** 
    * Holds the parameters passed to the class 
    * @var mixed 
    */ 
    private $parameters; 

    /** 
    * Database Handler 
    * @var [type] 
    */ 
    private $DBH; 

    /** 
    * Class constructor 
    * @param [type] $action  [description] 
    * @param [type] $parameters [description] 
    */ 
    public function __construct($action, $parameters){ 
     $this->parameters = $parameters; 

     $this->DBH = new PDO("mysql:host=".$this->config['host'].";dbname=".$this->config['database'], $this->config['username'], $this->config['password']); 

     return $this->$action(); 
    } 


    private function query(){ 
     $STH = $this->DBH->prepare($this->parameters); 
     $STH->execute(); 
     $result = $STH->fetchColumn(); 
     echo "<br><br>RESULT:".$result."<br><br><br>"; 
     echo "<br><br>RESULT:".empty($result)."<br><br><br>"; 

     return (empty($result)) ? FALSE : TRUE; 
    } 
} 

나는 모든 기능이 문제를주는 바 제거됩니다. true 또는 false를 반환하기위한 것입니다. 대신 $result = new Database('query', $query);을 호출 할 때 반환 값은 많은 데이터가있는 객체입니다

내가 잘못했는지 알고 싶습니다.

+0

empty()는 boolean을 반환하므로 'return! empty ($ result);'이면 충분합니다. –

+0

알아. 나는 코드에 실망하여 모든 것을 시도하고 있었다. – samdunne

답변

1

PHP는 __construct에서 반환하는 것을 무시합니다. new으로 새 객체를 만들면 __construct에있는 return의 내용이 아닌 새 객체가 반환됩니다.

당신이 생성자의 외부 당신을위한 조치를 실행하는 새로운 기능을 만들 필요가 원하는 것을 달성하기 위해 - 그런를 : 새로 생성 된 개체를 반환 suposed됩니다

class Database { 
    // your code... 

    public function __construct($parameters) { 
     $this->parameters = $parameters; 

     $this->DBH = new PDO("mysql:host=".$this->config['host']. 
      ";dbname=".$this->config['database'], 
      $this->config['username'], 
      $this->config['password']); 
    } 

    public function perform($action) { 
     return $this->$action(); 
    } 

    // rest of your code... 
} 

// usage: 
$db = new Database($query); 
$result = $db->perform('query'); // result should be a boolean. 
+0

그렇지만 내'return (empty ($ result))는 어떨까? 거짓 : TRUE;'line 값을 반환하지 않아야합니까? – samdunne

+0

@Sam : yes'query' 메쏘드는 여러분이 원하는 것을하고있을 것입니다 만, 생성자의 값을 반환하기 때문에 자동으로 버려집니다. 내 대답을 편집하고 가능한 해결책을 추가했습니다. – vstm

+0

'public $ return;'과 같은 공용 변수를 가질 수 있고, 쿼리 함수에서 객체를 생성 한 후에'$ this-> return = $ result'와'$ result = $ this-> return; – samdunne

1

__construct. 이 동작을 재정의 할 수 없습니다. usage을 참조하십시오.

Btw 이것은 new 연산자가 관련된 대부분의 OOP 언어에 대한 동작입니다.

관련 문제