Page 1 sur 1

[resolu] php objet: $this-> est vide

Posté : 30 juin 2012, 13:59
par juliette
Salut a tous, je commence la programation objet avec une simple classe de connections pour comprendre le principe...
je rencontre un soucis, a 1er vu et si je comprend bien: Fatal error: Cannot access empty property in C...
$this-> ne peut jamais etre vide en php, mon soucis est que j'ai (private $password = '';) qui est forcement vide car je suis en local...
est ce que je me trompe ? ya t'il une solution ?

ma classe:
<?php

Class DB {

    private $host = 'localhost';
    private $username = 'root';
    private $password = '';
    private $database = 'bdd';
    private $db;

    public function __construct($host = null, $database = null, $username = null, $password = null) {
        if ($host != null) {
            $this->host = $host;
            $this->username = $username;
            $this->password = $password;
            $this->database = $database;
        }
        try {


            $this->db = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->database, $this->username, $this->password,
                            array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
                    ));
        } catch (PDOException $e) {
            die('<h1>Impossible de se connecter a la base de donnees !</h1>');
        }
    }

    public function query($sql) {
        $req = $this->$db->prepare($sql);
        $req->execute();
        return $req->fetchAll(PDO::FETCH_OBJ);
    }

}

?>
mon index:
<?php 
require 'dbClass.php';
$DB = new DB();

var_dump($DB->query('SELECT * FROM table'));
?>

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <div>contenu</div>
    </body>
</html>
au cas ou je me trompe...

Re: php objet: $this-> est vide

Posté : 30 juin 2012, 14:01
par juliette
a savoir que var_dump de $DB retourne:
object(DB)[1]
  private 'host' => string 'localhost' (length=9)
  private 'username' => string 'root' (length=4)
  private 'password' => string '' (length=0)
  private 'database' => string 'bdd' (length=9)
  private 'db' => 
    object(PDO)[2]

Re: php objet: $this-> est vide

Posté : 30 juin 2012, 14:18
par juliette
resolu
public function query($sql) {
        $req = $this->$db->prepare($sql);
        $req->execute();
        return $req->fetchAll(PDO::FETCH_OBJ);
    }
dans cette fonction j'ai un $ en trop devant bd j'ai pas encore trop bien saisie le principe...

Re: php objet: $this-> est vide

Posté : 30 juin 2012, 14:26
par Mazarini
PDO::ERRMODE_EXCEPTION aussi si tu veux gérer des exceptions

Re: php objet: $this-> est vide

Posté : 30 juin 2012, 15:20
par juliette
désolé Mazarini, je ne comprend pas ce que tu veux dire ???
tu parle du try{ } ou de la fonction query ?

Re: php objet: $this-> est vide

Posté : 30 juin 2012, 16:25
par juliette
bon, je pense que c'est dans le try pour le constructeur...

Re: php objet: $this-> est vide

Posté : 30 juin 2012, 18:03
par Mazarini
Effectivement, si tu as une erreur de connexion, ca ne déclenche pas d'exception si tu ne le demandes pas.
Tu as demandé qu'un affichage de message, d'ailleurs je pensais que ton erreur venait de ca, je n'avais pas vu le $ en trop.

Edit : fais un test avec un mauvais user pour vérifier.

Re: php objet: $this-> est vide

Posté : 30 juin 2012, 20:47
par juliette
oui c'est bon, tous fonctionne bien, merci beaucoup :)