2012-01-21 17 views
1

すべて、静的関数へのPHP呼び出しが失敗します

以下のコードでエラーが発生します。
Notice: Undefined variable: userDAO in C:\wamp\www\Projetv0.2\Model_User.php on line 15
、その後
Fatal error: Call to a member function checkRecordExists() on a non-object in C:\wamp\www\Projetv0.2\Model_User.php on line 15

関連するコードは以下の通りです:ここでは私が取得エラーメッセージがあります。コードで何をしようとすると、db内の複数のテーブルにアクセスするためのユニークなクラス(DAO_DBrecord)があります。以下の場合、usersテーブルにアクセスしたいとします。これを行うには、DAO_DBrecordクラス内に特定の静的関数createUserDAOを作成して、正しい表名usersを持つコンストラクタを呼び出します。しかし、それは動作しません、なぜ私は理解できません。

Model_User.php:

<?php 
    require_once('Class_DB.php'); 
    require_once('DAO_DBrecord.php'); 

    class Model_user{ // Represents a connection to the users table in the DB 
     private $db; 
     private $userDAO; 

     function __construct($db){ 
      $this->db=$db; 
      $userDAO=DAO_DBrecord::createUserDAO($this->db);// static function - calls constructor w/ 'user' table name parameter 
      $this->userDAO=$userDAO; 
     } 
     function userInfoExists($userInfo, $colName){ 
      return $userDAO->checkRecordExists($userInfo, $colName); 
     } 
//Other stuff 
    } 
?> 

DAO_DBrecord.php:

<?php 
    require_once('Class_DB.php'); 

    class DAO_DBrecord { 
     private $db; 
     private $table; 

     private function __construct($db,$table){ 
      $this->db=$db; 
      $this->table=$table; 
     } 

     public static function createUserDAO($db) { 
      return new DAO_DBrecord($db, 'users'); 
     } 
//Other stuff 
    } 
?> 

あなたの助けありがとうございました!静的機能に問題はありません

JDelage

答えて

2

。問題はPHPに暗黙的な$thisがないことです。 (userInfoExistsのように)クラス内のメンバ変数を参照する場合は、$userDAOではなく、$this->userDAOと言う必要があります。

もちろん、これはすべて、DAO_DBrecordクラスがcheckRecordExists機能を持っているか継承していることを前提としています。そうでなければ、あなたは他の問題を起こすでしょう。

+0

Doh ...ありがとうございます。それはいつも私を得る愚かな間違いです。 – JDelage

関連する問題