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.
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.
$db
Devrait devenir $this->db
.
public function __construct() {
$this->db = Database::getInstance('localhost', 'database', 'root', '123456');
}
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
.
Je maintenant get Appel à une requête de fonction membre() sur un non-objet dans Database.class.php – Vinny
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.
Code, veuillez ... – NullUserException
Causes possibles: en utilisant une variable globale '$ variable', sans utiliser' global $ variable' ou '$ GLOBALS ['variable']' – Lekensteyn