2010-10-02 8 views
-2

Je reçois le message d'erreur suivant en essayant d'appeler une méthode d'une classe Singleton, dans une autre classe.Appel à une fonction membre en PHP

Appel à une fonction membre query() sur un non-objet.

+3

Code, veuillez ... – NullUserException

+0

Causes possibles: en utilisant une variable globale '$ variable', sans utiliser' global $ variable' ou '$ GLOBALS ['variable']' – Lekensteyn

Répondre

2

$db Devrait devenir $this->db.

public function __construct() { 
    $this->db = Database::getInstance('localhost', 'database', 'root', '123456'); 
} 
+0

Je reçois maintenant un appel à une requête de fonction membre () sur un non-objet dans Database.class.php – Vinny

+0

@Vinny: Vous avez la même erreur ici ... Toutes les variables membres doivent être préfixées par '$ this->' pour être accédé dans une méthode ... – ircmaxell

0

Il suffit de changer $db dans le constructeur de $this->db. Dans PHP, les propriétés des membres sont accessibles par référence explicite à l'objet $this.

De même, vous avez fait la même erreur dans votre classe Database. De plus, spécifier la méthode connect() comme statique n'a pas beaucoup de sens. En outre, si vous me demandez, qualificatif private serait plus approprié que public. Enfin, si vous n'avez pas l'intention de gérer l'exception ailleurs, utilisez simplement die() au lieu de echo.

public function connect($server, $database, $user, $pass) { 
    try { 
     $this->pdo = new PDO("mysql:host=$server;dbname=$database", $user, $pass); 
     $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    } catch(PDOException $e) { 
     echo "Error!"; 
    } 
} 

Dans la méthode query() utiliser également $this->pdo au lieu de simplement $pdo.

+0

Je maintenant get Appel à une requête de fonction membre() sur un non-objet dans Database.class.php – Vinny

0

Vous devez affecter et référencer $ pdo comme $ this-> pdo dans la base de données en plus d'assigner $ db à $ this-> db dans votre constructeur Users.

Questions connexes