kyript
Messages postés346Date d'inscriptionjeudi 7 avril 2005StatutMembreDernière intervention26 mars 2012
-
27 mai 2007 à 13:22
kyript
Messages postés346Date d'inscriptionjeudi 7 avril 2005StatutMembreDernière intervention26 mars 2012
-
28 mai 2007 à 09:52
Bonjour à tous
je post ici afin que vous donniez un avis sur la méthode utiliser...
Je tente d'afficher des news sur mon site, j'ai donc les pages suivantes:
- news.php // affichage des news
- news.class.php // définit les requetes pour les news
dans news.php:
// $conn est l'instance creér pour acceder à la bdd
public static function selectAllNews($conn) {
$req = "SELECT * FROM news_liste";
$query = $conn->select($req);
$fetchassoc = $conn->fetchassoc($query);
return $fetchassoc;
}
private function __Destruct() {
}
};
?>
Je passe donc l'instance de ma class bdd en paramètre à la méthode selectAllNews
est-ce la bonne technique à utiliser ?
je me pose cette question parce que je vais devoir implementer un do { } while() pour l'affichage des news et je sait pas trop comment mi prendre
merci pour votre aide
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 27 mai 2007 à 16:43
Salut,
Si ta classe n'a qu'une méthode et pas de propriété, alors elle est inutile : autant utiliser une simple fonction.
Passer "la connexion" (s'agit-il d'un objet ?) en paramètre de ta méthode ne me parait pas non plus idéal. Ce qui me semblerait plus malin, c'est d'assigner l'instance de ta connexion bdd à une propriété de ta classe news.
protected $_db;
public function __construct()
{
$news -> _db = DB::getInstance();
}
public function selectAllNews()
{
$sql = "SELECT * FROM news_liste";
$result = $this -> db -> query($sql);
return $this -> $db -> fetch_assoc($result);
}
Pour cela, il faut que ta classe DB se comporte comme un singleton, et que la méthode statique getInstance retourne l'objet courant, sans l'instancier à nouveau.
Tu trouveras des sources en exemple ici.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 27 mai 2007 à 20:47
Re,
La portée des méthodes permet de t'assurer qu'elles ne seront pas utilisées par d'autres classes, ou, d'une manière plus générale, en dehors de la classe à laquelle elles appartiennent.
Private : seule la classe qui définit une méthode privée peut l'utiliser.
Protected : seule la classe qui définit une méthode protégée ainsi que d'éventuelles classes parentes ou filles peuvent l'utiliser
Public : utilisable n'importe où
La portée que tu donnes à une méthode dépend donc uniquement de ce qu'elle fait, de son utilité, de l'utilité que tu en as, éventuellement, de considérations sur la sécurité, du fait que ses paramètres sont ou non vérifiés dans la méthode.
Il n'y a donc que toi qui puisses décider de leur portée.
A propos des méthodes statiques :
http://classes.scriptsphp.org/article.Un-singleton-en-PHP5 Extrait :
"PHP5 gère aussi les éléments static dans les classes. C'est à dire que l'élément sera uniquement dépendant de la classe elle-même et non pas de ses instances. Dans le cadre d'une méthode static il est bien entendu impossible d'utiliser le mot clef $this se rapportant à l'objet, étant donnée que la propriété est indépendante de celui-ci."
Encore une fois : tout dépend de ce que tu en fais.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 27 mai 2007 à 21:02
hello,
S'il s'agit de le passer à une méthode et pas au constructeur, cela se justifie tout à fait si l'objet en question n'est utilisé que dans cette méthode, ou est peu utilisé. dans ce cas, inutile de s'embarrasser d'un objet dont on n'aura pas forcément besoin.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 27 mai 2007 à 17:02
Salut
"Si ta classe n'a qu'une méthode et pas de propriété, alors elle est inutile : autant utiliser une simple fonction."
=> parfois... tu fais un debut de code, il fait tout ce dont tu as besoin... et pourtant... t'as qu'une seule fonction... alors tu laisses ta classe, en esperant trouver d'autres besoins... et ajouter des fonctions...
genre hier, j'ai fait une classe qui parse une requette sql, elle est sous forme de classe pour la structure de donnee (c'est le pied quand meme...) et pour etre ameliore si quelqu'un trouve quelquechose a redire... pour le moment, elle decoupe parfaitement, et permet de recuperer les donnees selectionnees sous la forme array(array(champ1, alias1), ....) c'est super utile....
kyript
Messages postés346Date d'inscriptionjeudi 7 avril 2005StatutMembreDernière intervention26 mars 2012 27 mai 2007 à 19:49
Merci pour ces reponses
Pour répondre à neigedhiver, $conn est effictement un object mais je vais aller voir du coté de singleton je voit pas ce que s'est exactement
et cette class n'a qu'une méthode car je venait de la commencer j'ai ensuite poster ce message pour savoir si je partait dans la bonne direction
mais avec plus de code cela aurait ete plus dur de tout changer
kyript
Messages postés346Date d'inscriptionjeudi 7 avril 2005StatutMembreDernière intervention26 mars 2012 27 mai 2007 à 20:13
cool j'ai donc mis mon constructeur de ma classe sgbd en private
j'accede alors a la connection par la methode statique et tout fonctionne bien
une derniere question pour finir
les autres methode et la class doivent elle etre en private ?
et pour les methode que j'utilise regulierement ( ex insertion de données dans la base)
doivent elle etre en statique aussi ?