2011-07-03 4 views
-1

私は2つのクラス、データベースとユーザーを持っています。データベースクラスには、データベースに接続する関数があります。私はUserクラス内のデータベースへの接続を持つことができるようにしたいと思います。データベースクラスを別のクラスにオートロードするには?

class User { 

    function __construct() 
    { 
     require_once 'database.class.php'; 
     $DBH = new Database(); 
     $DBH->connect(); 
    } 

    function register_user() 
    { 
     $DBH->prepare('INSERT INTO users VALUES (:username, :password, :forename, :surname)'); 
     $DBH->execute(array(':username' => 'administrator', ':password' => '5f4dcc3b5aa765d61d8327deb882cf99', ':forename' => 'Richie', ':surname' => 'Jenkins')); 
    } 
} 

は、私は次のエラーを取得する:これは私が現在、ユーザークラスでやっているものです「スコープ」

PHP Fatal error: Call to a member function prepare() on a non-object

答えて

0

あなたはについてお読みください$DBHはローカルでのみ__construct()に宣言されています。

これは簡単です。単に

class User { 
    private $DBH; 

を追加し、あなたが$this->DBHから$DBH変化がどこに。 $thisとメンバー変数についても読むことができます。

+0

私はこのエラーを受け取ります:PHP致命的なエラー:定義されていないメソッドを呼び出すDatabase :: prepare() – ritch

+0

つまり、 'Database'クラスは' prepare() 'メソッドを持っていません。その実装は何ですか? –

+0

私は少し混乱しています、なぜ私はPDOの準備機能を使用できないのですか? – ritch

0

他のクラスメソッドでのアクセスを許可するには、$DBHをクラスプロパティに割り当てる必要があります。今$DBH__construct()にローカルであり、そして、他のクラスメソッドであなたが$this->dbhでそのオブジェクトを呼び出します

class User { 

    private $dbh; 

    public function __construct() { 
     ... // your code 
     $this->dbh = $DBH; 
    } 

} 

それ以外では使用できません。