Découverte POO

Résolu
kyript Messages postés 346 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 26 mars 2012 - 27 mai 2007 à 13:22
kyript Messages postés 346 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 26 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

<?php
include('./news/news_class.php5');
$news = [news::selectAllNews($conn News::selectAllNews($conn]);
?>



        Actualités



   

        <?php echo $news['dateNews']; ?> -- <?php echo $news['sujetNews']; ?>
       

       

        <?php echo $news['messageNews']; ?>
   

dans news_class.php5'

<?php
class News {


 private function __Construct() {
 }
 
 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

7 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
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.
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
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.
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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.
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
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....

une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kyript Messages postés 346 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 26 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

merci à vous
0
kyript Messages postés 346 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 26 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 ?

merci
0
kyript Messages postés 346 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 26 mars 2012
28 mai 2007 à 09:52
Salut

merci à vous deux je comprend mieux l'utilité maintenant
l'éxperience definira la methode à utiliser...

bye
0
Rejoignez-nous