2012-01-21 4 views
1

Tous,L'appel PHP à la fonction statique échoue

Je reçois une erreur avec le code ci-dessous. Voici le message d'erreur que je reçois:
Notice: Undefined variable: userDAO in C:\wamp\www\Projetv0.2\Model_User.php on line 15
puis
Fatal error: Call to a member function checkRecordExists() on a non-object in C:\wamp\www\Projetv0.2\Model_User.php on line 15

Le code correspondant est ci-dessous. Ce que j'essaie de faire avec le code est d'avoir une classe unique (DAO_DBrecord) pour accéder à plusieurs tables dans un db. Dans le cas ci-dessous, je veux accéder à ma table users. Pour ce faire, j'ai créé une fonction statique spécifique createUserDAO dans la classe DAO_DBrecord qui appelle le constructeur avec le nom de la table de droite, users. Cependant, cela ne fonctionne pas, et je ne peux pas comprendre pourquoi.

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 
    } 
?> 

Merci à tous pour votre aide!

JDelage

Répondre

2

Ce n'est pas un problème avec la fonction statique. Le problème est que PHP n'a pas de $this implicite. Lorsque vous faites référence à la variable membre dans la classe (comme vous êtes dans userInfoExists), vous devez indiquer $this->userDAO plutôt que simplement $userDAO.

Bien sûr, tout ceci suppose que la classe DAO_DBrecord a ou hérite d'une fonction checkRecordExists. Si ce n'est pas le cas, vous aurez d'autres problèmes.

+0

Doh ... Merci. Ce sont toujours les erreurs les plus stupides qui m'arrivent. – JDelage

Questions connexes