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 chacun de ces classe 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'inserer des données, je passe mon objet entier à une méthode de ma classe Sql.
Récement 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 :
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 ?
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
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;
}
}
Merci de votre aide :)