IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Programmation orienté objet en php 5


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Points : 40
    Points
    40
    Par défaut Programmation orienté objet en php 5
    Je suis débutant en php5 orienté objet voilà mon problème:
    si je fait une classe utilisateur
    class Utilisateur
    private $attributs;
    function _construct{
    //constructeur
    }
    function _ajouter(){
    qu'est ce que je doit mettre ici?
    le traitement de la requete et l'execution se fait ici?
    }

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Je ne connais pas très php 5 mais par contre je connais bien les langages objets.

    Dans la logique de ta classe, tu vas devoir passer à ta méthode _ajouter() les paramètre nécessaire à la construction de ton utilisateur. Ce n'est pas dans cette méthode que tu vas manipuler ton objet.

    Normalement une manière plus de le faire est de séparer les couches :

    Couche service : globalement c'est la logique métier de l'application

    Couche DAO : c'est la couche qui assure la persistence des données

    Couche modèle objet : c'est une représentation de ta base donnée sous forme d'une hiérarchie d'objet


    ----

    http://www.zap-buzz.com - programme tv en un coup d'oeil

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Tu mets bien ce que tu veux. A toi d'organiser ton code comme bon te semble.
    Cela dit on fait habituellement une méthode get distincte pour récupérer les données issues d'un formulaire, une autre pour la connexion à la bdd etc.
    Mais il n'y a pas de contraintes particulières par rapport au mode procédural (d'ailleurs la fonction _construct est optionnelle), il y a juste des possibilités supplémentaires.

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pense à mettre des balises [code].

    Une classe "utilisateur" est une classe "modèle" car elle représente une ressource en BDD (le modèle à proprement parler). C'est donc effectivement à elle que revient la tâche d'extraire les données et de les écrirer. En revanche, ce n'est jamais de la responsabilité d'une classe modèle de décrire un formulaire ou d'afficher des données par exemple, c'est le rôle de la couche présentation.

    Voici généralement ce qu'on voit dans les classes modèles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    <?php
     
    class Utilisateur {
     
    	// Les données de l'instance
    	protected $_data;
     
    	// Le constructeur
    	public function __construct ($id) {
    		// réccupérer les données depuis la db
    		$this->retrieve($id);
    	}
     
    	// Permet d'utiliser les données de l'instance comme des attributs classiques
    	public function __get ($key) {
    		return isset($this->_data[$key]) ? $this->_data[$key] : null;
    	}
     
    	// Permet de définir les données de l'instance comme des attributs classiques
    	public function __set ($key, $value) {
    		$this->_data[$key] = $value;
    	}
     
    	// créer un nouvel enregistrement
    	public static function create ($data) {
    		if (empty($data)) return false;
    		$query = "INSERT INTO `Utilisateurs` (`nom`,`prenom`,age`) VALUES (:nom,:prenom,:age)";
    		// la classe Database est un singleton de PDO (c'est plus pratique, mais pas vraiment propre)
    		$stmt = Database::prepare($query);
    		return $stmt->execute($data);
    	}
     
    	// réccupérer un enregistrement
    	public function retrieve ($id) {
    		$query = "SELECT `id`,`nom`,`prenom`,age` FROM `Utilisateurs`";
    		if ($stmt = Database::query($query)) {
    			// Mettre à jour les données de l'instance
    			$this->_data = $stmt->fetch(PDO::FETCH_ASSOC);
    			return $this;
    		}
    		return false;
    	}
     
    	// mettre à jour l'enregistrement
    	public function update () {
    		if (empty($this->_data)) return false; 
    		$query = "UPDATE `Utilisateurs` SET `nom`=:nom,`prenom`=:prenom,`age`=:age";
    		$stmt = Database::prepare($query);
    		$stmt->bindParam(':nom', $this->_data['nom']);
    		$stmt->bindParam(':prenom', $this->_data['prenom']);
    		$stmt->bindParam(':age', $this->_data['age']);
    		return $stmt->execute();
    	}
     
    	// supprimer l'enregistrement
    	public function delete () {
    		if (empty($this->_data)) return false; 
    		$query = "DELETE FROM `Utilisateurs` WHERE `id`={$this->_data['id']}";
    		return Database::exec($query);
    	}
     
    	// permettre la création d'une instance de manière statique (Utilisateur::export(1) équivaut à new Utilisateur(1))
    	public static function export ($id) {
    		return new self($id);
    	}
    }
    Et voici un exemple de façon de l'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $utilisateur_1 = new Utilisateur(1);
    $utilisateur_1->nom = "test";
    $utilisateur_1->prenom = "test";
    if ($utilisateur_1->update()) echo "Utilisateur mis à jour";
     
    $utilisateur_2 = Utilisateur::export(2);
    if ($utilisateur_2->delete()) echo "Utilisateur supprimé";

Discussions similaires

  1. Réponses: 160
    Dernier message: 18/07/2012, 21h39
  2. [PHP 5.0] La programmation orientée objet en PHP
    Par RideKick dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2011, 17h01
  3. Programmation orientée objet en PHP
    Par dekalima dans le forum Langage
    Réponses: 2
    Dernier message: 28/03/2011, 12h45
  4. Réponses: 26
    Dernier message: 12/10/2010, 06h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo