Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/05/2011, 19h30   #1
Invité régulier
 
Homme
Ingénieur développement logiciels
Inscription : mai 2011
Messages : 36
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 : 36
Points : 6
Points : 6
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?
}
dhbmedanis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 22h33   #2
Invité régulier
 
Homme
Inscription : mai 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 8
Points : 8
Points : 8
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
zapbuzz est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/05/2011, 23h34   #3
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
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.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 10h06   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 :
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 :
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é";
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h58.


 
 
 
 
Partenaires

Hébergement Web