kontas Photographe amateur daltonien | Salut à tous,
J'aurais aimé avoir votre avis sur les bonnes pratiques en programmation orienté objet.
Actuellement j'ai des classes que l'on dira métiers qui manipule et affiche les données, pour chacune de ces classes métiers, j'ai un équivalent en classe Sql qui sera charger de faire les requetes et renvoyer des tableau bruts de résultats. Quand j'ai besoin d'insérer des données, je passe mon objet entier à une méthode de ma classe Sql.
Récemment en mettant à jours mon serveur php, je me suis retrouvé avec des warning ****Only variables should be passed by reference in****
car je faisais cela dans mes classe Sql :
Code :
- public function insert($objet){
- $query = "INSERT INTO maTable (Id,monChamp) VALUES (:id,:monChamp)";
- $prep = $this->pdo->prepare($query);
- $prep->bindParam(':id', $objet->getId(), PDO::PARAM_INT);
- $prep->bindParam(':monChamp', $objet->getMonChamp(), PDO::PARAM_STR);
- try {
- $prep->execute();
- return $this->pdo->lastInsertId();
- } catch (PDOException $e) {
- conn::setErreur($e);
- return false;
- }
- }
|
Le Warning vient du fait qu'il ne serais pas recommandé de manipuler un objet à l'intérieur de la méthode BindParam de pdo. Et c'est bien dommage car je trouvais cela bien pratique. car ca eviter de déclarer de nouvelles variable le temps de l'insertion des données, mais également la facilité à l'écriture grace à un bon ide.
Donc si il n'est pas recommander de faire ca, sous quelle forme est t'il conseillé de faire passer les données aux méthodes Sql ?
Code :
- public function insert($objet){
- $id = $objet->getId();
- $monChamp = $objet->getMonChamp();
-
- $query = "INSERT INTO maTable (Id,monChamp) VALUES (:id,:monChamp)";
- $prep = $this->pdo->prepare($query);
- $prep->bindParam(':id', $id, PDO::PARAM_INT);
- $prep->bindParam(':monChamp', $MonChamp, PDO::PARAM_STR);
- try {
- $prep->execute();
- return $this->pdo->lastInsertId();
- } catch (PDOException $e) {
- conn::setErreur($e);
- return false;
- }
- }
|
ou encore, sachant pour pour les grosse requete ca va par être très lisible je trouve
Code :
- public function insert($id,$objet){
-
- $query = "INSERT INTO maTable (Id,monChamp) VALUES (:id,:monChamp)";
- $prep = $this->pdo->prepare($query);
- $prep->bindParam(':id', $id, PDO::PARAM_INT);
- $prep->bindParam(':monChamp', $MonChamp, PDO::PARAM_STR);
- try {
- $prep->execute();
- return $this->pdo->lastInsertId();
- } catch (PDOException $e) {
- conn::setErreur($e);
- return false;
- }
- }
|
Petite question bonus sur la manière dont sont renvoyé les donnée, mieux vaut les renvoyer sous forme de tableau brut, ou bien utiliser la fonction PDO::FETCH_CLASS: qui créera automatiquement un objet hydraté de la classe renseigné ?
Merci de votre aide
|