1

そこで、すべてのデータベース要求を処理するデータベースクラスを作成しました。すべてがコンストラクターを通過し、値を返す必要があります。

クラスはそうです

<?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);は、大量のデータを含むオブジェクトです。

私が間違ったことを何か考えていますか?

4

2 に答える 2

2

PHPは、返されるものを無視します__construct。を使用して新しいオブジェクトを作成すると、inの内容でnewはなく、新しいオブジェクトが返されます。return__construct

必要なことを実現するには、コンストラクターの外部でアクションを実行する新しい関数を作成する必要があります-次のようになります。

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.
于 2012-06-06T19:20:33.040 に答える
1

__construct新しく作成されたオブジェクトを返すことになっています。この動作はオーバーライドできません。使用法を参照してください。

newところで、これは、オペレーターが関与している場合のほとんどのOOP言語の動作です。

于 2012-06-06T19:23:18.537 に答える