Bonjour à tous,
Je suis actuellement en train de développer une application PHP orienté objet en relation avec une base de données MySQL.
J'ai déjà créé plusieurs classe de la façon suivante :
La plus importante est donc Database.php qui permet de se connecter ainsi que de lier toutes les autres classes
Elle ressemble à ceci :
J'ai évidemment beaucoup d'autres fonctions autres que getSurgeon() et getCase().
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 <?php require ("SurgeonData.php"); require ("CaseData.php"); class Database { private $con; public function __construct($host,$username,$password,$database) { $this->con = new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password); } public function getSurgeon($sql) { $statement = $this->con->prepare($sql); $statement->execute(); while($row = $statement->fetch()) { $dataSet[] = new SurgeonData($row); } if(!empty($dataSet)) return $dataSet; else return null; } public function getCase($sql) { $statement = $this->con->prepare($sql); $statement->execute(); while($row = $statement->fetch()) { $dataSet[] = new CaseData($row); } if(!empty($dataSet)) return $dataSet; else return null; } } ?>
Mais voici à quoi ces classes ressemblent :
SurgeonData.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 <?php class SurgeonData { private $id_surgeon; private $lastname_surgeon; ... public function __construct($dbRow) { $this->id_surgeon = $dbRow['id_surgeon']; $this->lastname_surgeon = $dbRow['lastname_surgeon']; ... } public function getSurgeonID() {return $this->id_surgeon;} public function getSurgeonLastname() {return $this->lastname_surgeon;} ... } ?>
C'est tout pour l'orienté objet ! Et dans mon code principal j'ai besoin d'afficher différentes informations venant de plusieurs tables. Voici mon procédé :
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 $db = new Database("mon adresse","mon user","mon password","ma database"); $dataSet = $db->getCase (" select * from cases inner join [OTHER_TABLE] on cases.id_cases=[OTHER_TABLE].case_id and ... order by ...; "); if($dataSet) { foreach($dataSet as $data) //Display all current cases { echo "Case n° " .$data->getCaseID()."<br />"; echo "Case : " .$data->getCaseCase()."<br />"; echo "Date : " .$data->getCaseDateSurgery()."<br />"; //Ici je ne peux effectuer que les fonctions présentes dans CaseData.php, donc je dois faire toute l'opération précédente pour chaque table différente que je veux query $dataSet2 = $db->getSurgeon (" select * from surgeons inner join cases on cases.surgeon_id=surgeons.id_surgeon and cases.id_cases = ".$id_case." "); if($dataSet2) { foreach($dataSet2 as $data2) //Display all current cases {echo "Surgeon : " .$data2->getSurgeonLastname()."<br />";} } } } else echo "No result found";
Pour résumer, comment puis-je créer une fonction qui me faciliterait l’affichage des mes données ?
Histoire que je n'ai plus qu'à faire par exemple :
Dois-je changer ma façon de procéder, changer mon système de connection à la base de donnée ? Ou bien est-ce possible de créer une fonction à partir de la structure actuelle de mon projet ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $newFunction = newFunctionToGetSurgeon() echo "Something : " .$newFunction->getAlreadyCreatedFunction().;
Cordialement,
EDIT
Voilà j'ai trouvé ma solution pour ceux que ça intéresse ...
J'ai créé query.php qui gère à lui seul la connection ainsi que toutes les requêtes, cela permet ainsi au code principal d'être beaucoup plus lisible et clair
Et dans le code principal il suffit juste d'y inclure le fichier query.php et faire ceci :
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 <?php include_once "../class/Database.php"; $db = new Database("localhost","root","","3dside"); function getCurrentCases() { global $db; if($db != null) { $dataSet = $db->getCase (" select * from cases inner join progress on cases.id_cases=progress.case_id and progress.current=1 order by cases.date_surgery; "); return $dataSet; } else "Erreur interne dans [query.php] contactez l'administrateur"; } ?>
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 <?php $currentCases = getCurrentCases(); foreach($currentCases as $data) //Display all current cases { echo "Case n° " .$data->getCaseID()."<br />"; echo "Case : " .$data->getCaseCase()."<br />"; echo "Date : " .$data->getCaseDateSurgery()."<br />"; $currentSurgeon = getCurrentSurgeon(); foreach($currentSurgeon as $data) { echo "Surgeon : " .$data->getSurgeonLastname()."<br />"; } } ?>
Partager