Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/11/2007, 09h10   #1
Membre du Club
 
Inscription : décembre 2005
Messages : 113
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 113
Points : 57
Points : 57
Par défaut [POO] Ajouter des attributs dans le constructeur

Bonjour,

j'essaie actuellement de faire une classe maison pour manipuler une table mySQL comme un objet.

Mon but est lorsque je crée un objet, je parcours la structure de la table et je crée autant d'attributs (ou variables d'instances) que ma table contient de champ. C'est super pratique quand le developpement et en cours est que la table subit des modifs de structure...

Par contre en production je compte mettre ces champs dans un array , histoire d'eviter la requete pour obtenir les champs (SELECT COLUMN_NAME AS nom FROM INFORMATION_SCHEMA.COLUMNS...)

Comment faire pour déclarer de nouveaux attributs dans le constructeur ? dans mon cas dans une boucle (mysql_fetch_array en dev et foreach en prod)

Merci d'avance !

Alex
Al3x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 19h05   #2
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Citation:
Envoyé par Al3x Voir le message
Comment faire pour déclarer de nouveaux attributs dans le constructeur ?
Qu'entends-tu par là ?
Les attributs appartiennent à la classe, pas au constructeur... Peut-être voulais-tu parler des paramètres du constructeur ?

As-tu un bout de code à nous montrer ?
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 19h15   #3
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

Citation:
j'essaie actuellement de faire une classe maison pour manipuler une table mySQL comme un objet.
Avant de réinventer la roue, est-ce que tu as cherché à savoir si une bibliothèque préexistante ne répondrait pas déjà à tes besoins ?


Citation:
Comment faire pour déclarer de nouveaux attributs dans le constructeur ?
Je ne crois pas que ça soit possible, PHP n'est pas très avancé en terme de meta-programmation. Par contre, tu peux facilement obtenir le même effet en utilisant les méthodes magiques __get() et __set() et un tableau
__________________
Toute la documentation Ruby on Rails : gotapi.com/rubyrails
Mes articles :
> HAML : langage de template pour Ruby on Rails
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 19h19   #4
Membre du Club
 
Inscription : décembre 2005
Messages : 113
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 113
Points : 57
Points : 57
Citation:
Envoyé par winloto Voir le message
Qu'entends-tu par là ?
Les attributs appartiennent à la classe,
tout a fait et c'est bien la mon problème, je veux lors de l'execution du constructeur ajouter à ma classe autant d'attributs que ma table contient de champ le code n'est pas ecrit mais dans la vue de mon esprit torturé et fatigué donnerai un truc comme ca

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
function MaClasse() { ;
 
		sql::init(); // Methode static da ma classe sql pour initialiser
 
		$members = Array() ;
 
		$SQL = 'SELECT COLUMN_NAME AS nom FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = "'.self::$table.'"' ;
 
		$result = mysql_query($SQL);
 
		while ( $row = mysql_fetch_array($result)){ 
			if ($row['nom'] != 'created') {
				array_push(self::$members, $row['nom']) ;
				$this->$row['nom']=''   ; // C'est ici que je voudrait ajouter des attributs....
			}	
		} 
 
		sql::close() ; // pour fermer
 
 
	}
Al3x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 19h22   #5
Membre du Club
 
Inscription : décembre 2005
Messages : 113
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 113
Points : 57
Points : 57
Citation:
Envoyé par Taum Voir le message
Salut,


Avant de réinventer la roue, est-ce que tu as cherché à savoir si une bibliothèque préexistante ne répondrait pas déjà à tes besoins ?


Je ne crois pas que ça soit possible, PHP n'est pas très avancé en terme de meta-programmation. Par contre, tu peux facilement obtenir le même effet en utilisant les méthodes magiques __get() et __set() et un tableau
en bon fainéant bien sur que j'ai regardé mais c'est souvent des usines à gaz et j'ai envie d'utiliser un truc que je comprends à 100% c'est pour ca que je suis en train de me faire un classe

je vais jetter un oeil du coté de __get(); et __set(); merci !!
Al3x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 19h27   #6
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Ceci ne répondrait-il pas à ta demande ?

Code :
1
2
3
4
 
while ...... {
  $this->$row['nom'] = NULL;
}
Ca permettrait d'initialiser chaque champ/attribut à NULL
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 19h39   #7
Membre du Club
 
Inscription : décembre 2005
Messages : 113
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 113
Points : 57
Points : 57
Citation:
Envoyé par winloto Voir le message
Ceci ne répondrait-il pas à ta demande ?

Code :
1
2
3
4
 
while ...... {
  $this->$row['nom'] = NULL;
}
Ca permettrait d'initialiser cache champ/attribut à NULL
voila qui me semble plus propre que mon $this->$row['nom'] ='' ;
Al3x est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h49.


 
 
 
 
Partenaires

Hébergement Web