stocker deux classes dans une autre

claudia
Invité n'ayant pas de compte PHPfrance

24 juin 2014, 10:38

Bonjour ,
Je bloque sur un truc en php dans un exercice j'ai :
2 tables MySQL compsées de :
MOT :
mot_id
mot_val
mot_compte
Lien :
lien_id
lien_mot1
lien_mot2
lien_compte
Tout d'abord il est demandé de crée 2 classes dans un fichier php pour modeliser les tables SQL Mot et Lien , ça je l'ai faite avec constructeur geters et seteur .
apres il est demandé de crée une classe NET singleton à une seule instance qui stocke toutes les instantes de MOT et Lient ( c'est ici que je bloque je sais comment déclaré une classe singleton mais le fait de stocker deux classes dans une autre çe je sais pas faire ) je vous donne mon code je sais pas trop si il est bon ou pas
<?php
class Mot
{
		private $mot_id,$mot_val,$mot_compte;
		/*
		public function __construct()
	{
		
	}
		*/
	//getters
	public function __get($tmp){
			if($tmp=="mot_id") { return $this->mot_id; }
			if($tmp=="mot_val") { return $this->mot_val; }
			if($tmp=="mot_compte") { return $this->mot_compte; }
	}
	
	//setters
	public function __set($tmp,$vale){
		if($tmp=="mot_id") { $this->mot_id=$vale; }
		if($tmp=="mot_val") {  $this->mot_val=$vale; }
		if($tmp=="mot_compte") {  $this->mot_compte=$vale; }
	}
	
	//Methode Incrementer 
	
	public function incrementmot(){
		$this->mot_compte = $this->mot_compte +1;
	}
	
}




class Lien
{
		private $lien_id,$lien_mot1,$lien_mot2,$lien_compte;
		
		/*
		public function __construct()
	{
		
	}
		*/
	//getters
	public function __get($tmp){
			if($tmp=="lien_id") { return $this->lien_id; }
			if($tmp=="lien_mot1") { return $this->lien_mot1; }
			if($tmp=="lien_mot2") { return $this->lien_mot2; }
			if($tmp=="lien_compte") { return $this->lien_compte; }

	}
	
	//setters
	public function __set($tmp,$vale){
		if($tmp=="lien_id") { $this->lien_id=$vale; }
		if($tmp=="lien_mot1") {  $this->lien_mot1=$vale; }
		if($tmp=="lien_mot2") {  $this->lien_mot2=$vale; }
		if($tmp=="lien_compte") {  $this->lien_compte=$vale; }
	}
	
	//Methode Incrementer 
	
	public function incrementlien(){
		$this->lien_compte = $this->lien_compte +1;
	}
	
}

class Net
{

	 private static $_instance = null;
	 private $mot_id,$mot_val,$mot_compte,$lien_id,$lien_mot1,$lien_mot2,$lien_compte;
	 
	  //Constructeur de la classe singleton Net
 	 private function __construct( $_mot_id,$_mot_val,$_mot_compte,$_lien_id,$_lien_mot1,$_lien_mot2,$_lien_compte) {
     	$this->mot_id = $_mot_id;
     	$this->mot_val = $_mot_val;
	  	$this->mot_compte = $_mot_compte;
	   	$this->lien_id = $_lien_id;
	    $this->lien_mot1 = $_lien_mot1;
		$this->lien_mot2 = $_lien_mot2;
		$this->lien_compte = $_lien_compte;
   }
   
   // * Méthode qui crée l'unique instance de la classe si elle n'existe pas encore puis la retourne.
   
      public static function getInstance($_mot_id,$_mot_val,$_mot_compte,$_lien_id,$_lien_mot1,$_lien_mot2,$_lien_compte) {
 
     if(is_null(self::$_instance)) {
       self::$_instance = new Net($_mot_id,$_mot_val,$_mot_compte,$_lien_id,$_lien_mot1,$_lien_mot2,$_lien_compte);  
     }
 
     return self::$_instance;
   }

}
	?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 juin 2014, 10:53

salut,

les bonnes pratiques veulent que l'on n'e déclare qu'une classe par fichier, c'est plus simple a utiliser, plus simple à maintenir et quand tu le voudra tu pourras utiliser un système de chargement automatique des classes rapidement et simplement.

tu passe trop de paramètre sur ton constructeur.
setter / getter : trop dur de demander à l'id de les créer ?

utiliser les méthodes magique c'est bien mais pas super maintenable ;)

Coté terminologie, tu ne stocke pas des classes mais des objets (c'est a dire des instances de classes).
La comme ça tu dit que c'est pinailler mais une classe et un objet ce n'est pas la même chose, si tu n'est pas précis c'est le souk ;)

si tu as plusieurs mot, ou plusieurs lien il te faut utiliser des tableaux pour les stocker.
en clair deux propriétés de la classes : mots et liens qui sont des tableaux.
A toi de générer le fait que ce soit bien des tableaux que l'on y met, d'ajout une méthode add pour chaque et les accesseurs qui vont bien pour ajouter une liste directement.

@+
Il en faut peu pour être heureux ......

claudia
Invité n'ayant pas de compte PHPfrance

24 juin 2014, 11:09

est ce que c'est bien ça ce qu'il faut faire ??
<?php
class Net
{

	 private static $_instance = null;
		private $les_mots;	
		private $les_liens;

	 
	 
	private function __construct()
	{
		$this->les_mots=array();
		$this->les_liens=array();
	}
	
   
   // * Méthode qui crée l'unique instance de la classe si elle n'existe pas encore puis la retourne.
   
      public static function getInstance() {
 
     if(is_null(self::$_instance)) {
       self::$_instance = new Net();  
     }
 
     return self::$_instance;
   }
  
   
   //Methode pour ajouter un Mot 
   	public function ajoutMot($_mot)
	{
		if($_mot instanceof Mot)
		{
			$this->les_mots[]=$_mot;
		}
	}
   
   
      //Methode pour ajouter un lien 
   	public function ajoutLien($_lien)
	{
		if($_lien instanceof Lien)
		{
			$this->les_liens[]=$_lien;
		}
	}
}
?>

claudia
Invité n'ayant pas de compte PHPfrance

24 juin 2014, 11:39

tjrs pas de rep :cry:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 juin 2014, 15:44

Modération :
Tes délais ne nous intéressent pas.
Nous savons que tu es en difficulté puisque tu demandes de l'aide,
mais nous sommes tous bénévoles et répondons selon nos disponibilités.

Merci de ne pas s'impatienter.


le principe que tu énonce est bon.
Manque la possibilité d'ajouter un tableau et d'affecter un tableau

@+
Il en faut peu pour être heureux ......