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 :

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;
	}
}
?>
J'ai évidemment beaucoup d'autres fonctions autres que getSurgeon() et getCase().

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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$newFunction = newFunctionToGetSurgeon()
echo "Something : " .$newFunction->getAlreadyCreatedFunction().;
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 ?

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

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";
	}
?>
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
	<?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 />";
                                }
			}
 
	?>