comme convenu je montre les fruits de mon travail sur les categories d'un site ecommerce en php5.
Je prenderai toute suggestion pour l'ameliorer.
un peu long excusez moi mais beaucoup de répétition.

class.categorie

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
 
class Categorie
{   
	private $id;
	private $titre;
	private $description;
	private $estActive;
	private $estDansMenu;
	private $dateModification;
	private $dateCreation;
	private $idSupCategorie;
	private $erreurs = array();
 
	  /**
         * Constantes relatives aux erreurs possibles rencontrées lors de l'exécution de la méthode
         */
 
	const TITRE_INVALIDE = 1;
	const DESCRIPTION_INVALIDE = 2;
	const CONTENU_INVALIDE = 3;
	const ESTACTIVE_INVALIDE = 4;
	const ESTDANSMENU_INVALIDE = 5;
	const DATEMODIFICATION_INVALIDE = 6;
	const DATECREATION_INVALIDE = 7;*/
	/**
		* Constructeur de la classe Personnage
		* @param $donnees array Les valeurs à assigner au personnage
		* @return void
		*/
 
	public function __construct(array $donnees)
	{
		$this->DonnerProprietes($donnees);
 
	}
 
	/**
		* Méthode permettant d'assigner les valeurs aux attributs
		* @param $donnees array Les valeurs à assigner
		* @return void
		*/
	public function DonnerProprietes(array $donnees)
	{
		//on parcourt le tableau $donnees et la clé de l'élément courant est copiée dans $key tandis que sa valeur est copiée dans $value!
		foreach ($donnees as $key => $value)
		{
			//switch équivaut à une série d'instructions if sur la key
			switch ($key)
			{
				/*1 cas id: la cle vaut la valeur $value de type int*/
			case 'id':
				$this->$key = (int) $value;
				break;
				/*2 cas titre: la cle vaut la valeur $value de type string*/    
			case 'titre':
				$this->titre = (string) $value;
				break;
				/*3 cas description: la cle vaut la valeur $value de type string*/		
			....
			}
		}
	}
 
	/**
		* Méthode permettant de savoir si la categorie est nouvelle
		* @return bool
		*/
	public function isCategorie()
	{
		return empty($this->id);
	}
 
	/**
		* Méthode permettant de savoir si la categorie est valide
		* @return bool
		*/
	public function isValid()
	{
		return !(empty($this->titre) || empty($this->description));
	}
 
 
	// SETTERS //
 
	public function setId($id)
	{
		$this->id = (int) $id;
	}
 
 
	public function setTitre($titre)
	{
		if (!is_string($titre) || empty($titre))
		$this->erreurs[] = self::TITRE_INVALIDE;
		else
		$this->titre = $titre;
	}
 
	public function setDescription($description)
	{
		if (!is_string($description) || empty($description))
		$this->erreurs[] = self::CONTENU_INVALIDE;
		else
		$this->description = $description;
	}
	....
 
 
	// GETTERS 
 
public function erreurs()
        {
            return $this->erreurs;
        }
 
	public function getId() {
		return (int) $this->id;
	}
 
	public function getTitre() {
		return (string) $this->titre;
	}
 
	public function getDescription() {
		return (string) $this->description;
	}
 
	....
 
	public function getDateModifcation($dateModif)
	{
		if (is_string($dateModif) && preg_match('`le [0-9]{2}/[0-9]{2}/[0-9]{4} à [0-9]{2}h[0-9]{2}`', $dateModif))
		$this->date_Modif = $dateModif;
	}
 
	...
 
}
?>
categorieManager.php
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
 
<?php
/**
	*class qui va permettre de faire le lien entre la BDD et la categorie
	**/ 
class CategorieManager
{
	/**
		* Attribut contenant l'instance représentant la BDD
		* @type PDO
		*/
 
	private $db; 
	/**
		* Constructeur étant chargé d'enregistrer l'instance de PDO dans l'attribut $db
		**/
 
 
	public function __construct($db)
	{
		$this->db = $db;
	}
 
 
 
	/**
		* Méthode permettant d'ajouter une categorie
		* @param $categorie Categorie La categorie à ajouter
		* @return vide
		*/
 
 
	protected function add(Categorie $categorie)
	{
		$requete = $this->db->prepare('INSERT INTO categorie SET titre = :titre, description = :description,estActive = :estActive, estDansMenu = :estDansMenu,dateModification = :dateModification, dateCreation = :dateCreation,idSupCategorie = :idSupCategorie');
 
		$requete->bindValue(':titre', $categorie->titre());
		$requete->bindValue(':description', $categorie->description());
		$requete->bindValue(':estActive', $categorie->estActive());
		$requete->bindValue(':estDansMenu', $categorie->estDansMenu());
		$requete->bindValue(':dateModification', $categorie->dateModification());
		$requete->bindValue(':dateCreation', $categorie->dateCreation());
		$requete->bindValue(':idSupCategorie', $categorie->idSupCategorie());
 
		$requete->execute();
	}
 
	/**
		* Méthode renvoyant le nombre de categorie total
		* @return int
		*/
 
	public function count()
	{
		return $this->db->query('SELECT COUNT(*) FROM categorie')->fetchColumn();
	}
 
	/**
		* Méthode permettant de supprimer une categorie
		* @param $id int L'identifiant de la categorie à supprimer
		* @return vide
		*/
 
	public function delete($id)
	{
		$requete = $this->db->prepare('DELETE FROM categorie WHERE id = :id');
 
		$requete->bindValue(':id', $id, PDO::PARAM_INT);
 
		$requete->execute();
	}
 
	/**
		* Méthode retournant une liste de categorie demandée
		* @param $debut int La première categorie à sélectionner
		* @param $limite int Le nombre de categorie à sélectionner
		* @return array La liste des categorie. Chaque categorie entrée est une instance de categorie.
		*/
 
	public function getList($debut = -1, $limite = -1)
	{
		$listeCategorie = array();
 
		$sql = 'SELECT id ,titre ,description ,estActive ,estDansMenu ,DATE_FORMAT (dateModification, \'le %d/%m/%Y à %Hh%i\') as dateModification, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation ,idSupCategorie FROM categorie ORDER BY id DESC';
 
 
		if ($debut != -1 || $limite != -1)
		$sql .= ' LIMIT ' . (int) $debut . ', ' . (int) $limite;
 
		$requete = $this->db->query($sql);
 
		while ($categorie = $requete->fetch(PDO::FETCH_ASSOC))
		$listeCategorie[] = new Categorie ($categorie);
 
		$requete->closeCursor();
 
		return $listeCategorie;
	}
 
	/**
		* Méthode retournant une categorie précise
		* @param $id int L'identifiant de la categorie à récupérer
		* @return Categorie La categorie demandée
		*/
 
	public function getUnique($id)
	{
		$requete = $this->db->prepare('SELECT id ,titre ,description ,estActive ,estDansMenu ,DATE_FORMAT (dateModification, \'le %d/%m/%Y à %Hh%i\') as dateModification, DATE_FORMAT (dateCreation, \'le %d/%m/%Y à %Hh%i\') AS dateCreation ,idSupCategorie  FROM categorie WHERE id = ?');
		$requete->bindValue(':id', (int) $id, PDO::PARAM_INT);
		$requete->execute();
 
		return new Categorie($requete->fetch(PDO::FETCH_ASSOC));
	}
 
	/**
		* Méthode permettant d'enregistrer une categorie
		* @param $Categorie Categorie la categorie à enregistrer
		* @voir function add()
		* @voir fonction modify()
		* @return vide
		*/
	public function save(Categorie $categorie)
	{
		if ($categorie->isValid())
		{
			$categorie->isCategorie() ? $this->add($categorie) : $this->update($categorie);
		}
		else
		{
			throw new RuntimeException('La categorie doit être valide pour être enregistrée');
		}
	}
 
	/**
		* Méthode permettant de modifier une categorie
		* @param $categorie categorie la categorie à modifier
		* @return vide
		*/
 
	protected function update(Categorie $Categorie)
	{
		$requete = $this->db->prepare('UPDATE categorie SET titre = :titre, description = :description ,estActive = :estActive, estDansMenu = :estDansMenu,dateModification = NOW(),idSupCategorie = :idSupCategorie WHERE id = :id');
 
		$requete->bindValue(':titre', $Categorie->titre());
		$requete->bindValue(':description', $Categorie->description());
		$requete->bindValue(':estActive', $Categorie->estActive());
		$requete->bindValue(':estDansMenu', $Categorie->estDansMenu());
		$requete->bindValue(':dateModification', $Categorie->dateModification());
		$requete->bindValue(':idSupCategorie', $Categorie->idSupCategorie());
		$requete->bindValue(':id', $Categorie->id(), PDO::PARAM_INT);
 
		$requete->execute();
	}
}
?>
J’ai travaillé sur le tuto de POO du site zero avec comme modèle le tp de news.
Petite question pourquoi a t-il mit les attributs en protected dans ce tuto, car je croyais que c’était important qu'il soit en private?

MERCI POUR TOUS VOS CONSEILS.