Bonjour Flo,
il y a des conventions, quand tu codes en objet, un nom de class débute par une majuscule, et est en CamelCase (rien de méchant à ce niveau, mais c'est une habitude que je te conseille vivement de prendre )
Le but de la POO est d'emprisonner des traitements, des donnés, des compétences dans des objets je simplifie un peu ton travail pour l'exemple,
je vais créer une classe Membre pour emprisonner les donnés relatives aux membres, une classe de connnexion à la bdd qui vas emprisonner le processus de connexion à ma Base de donnés, et vas effectuer les traitements pour me renvoyer des membres.
////Page membre.php
<?php
class Membre {
/*
Je définis un attribut privé, il n'y a que deux moyen d'en modifier la valeur:
Via le constructeur
Via l'accesseur setUsername
*/
private $username;
/*
si rien n'est passé au contructeur l'attibut vaut null,
sinon il prends la valeur passée en parametre
*/
public function __construct( $param_username= null ){
$this->username = $param_username != NULL? $param_username: NULL;
}
/*
Modifie la valeur de l'attribut username
*/
public function setUsername($param_username){
return $this->username = $param_username;
}
/*
renvoie la valeur d'username
*/
public function getUsername(){
return $this->username;
}
}
Ma classe pour la database :
////PAGE database.php
<?php
include 'membre.php';
class DatabaseObject {
/*
Des attributs
*/
private $dsn = 'mysql:host=localhost;dbname=testdb';
private $username = 'username';
private $password = 'password';
private $options = array();
/*
la connexion à la base de donnée
*/
public $dbh;
public function __construct($dsn, $username, $password){
$this->dbh = new PDO($dsn, $username, $password, $options);
}
public function getAllMembres(){
$stmt = $this->dbh->prepare("SELECT * FROM membre");
$membres = array();
while ( $row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$membre = new Membre($row'username']);
$membres] = $membre;
}
return $membres;
}
public function getMembreByUsername($param_username){
$membre = new Membre();
$stmt = $this->dbh->prepare("SELECT * FROM membre WHERE username = :param");
$stmt->bindParam(':param', $param_username);
/*
blah blah on récup
*/
return $membre;
}
}
?>
Et voila comment je peux utiliser mes classes depuis index.php par exemple
/////PAGE index.php
<?php
include 'membre.php';
include 'databaseObject.php';
/* je liste tous mes membres */
$db = new databaseObject($dsn, $username, $password);
$membres = $db->getAllMembres();
/* je récupère un membre */
$mon_gars_sur = $db->getMembreByUsername('b2oba');
/* je souhaite faire un affichage avec mon_gars_sur, $mon_gars_sur est une instance de membre,
Je n'ai pas accès à sa propriété $username, je dois passer par la methode getUsername()
*/
echo "Yaw sa te dis de faire un feat avec ". $mon_gars_sur->getUsername(). " wai wai !"
/*
voilou un peu comment sa se passe en programmation objet, à chaque classe un fichier.
Tes classes sont disponibles partout dans l'application, tes attributs sont protégés tout roule.
*/
?>
Voila typiquement comment j'aurais découpé ton application,
Quand j'instencie un objet DatabaseObject, j'ai accès à toutes les méthodes et ce partout dans mon application, la seule condition c'est d'inclure databaseObject.php
Si par exemple je dois envoyer un mail, je créer une class Mail, avec une methode send(), dans toute mon application si je crée une instance de Mail paf j'ai accès aux traitements pour encoyer des mails.
Voilou ma tentative pour t'aider dans la programation objet.