Découverte POO [Résolu]

Signaler
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012
-
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012
-
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

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
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
Messages postés
346
Date d'inscription
jeudi 7 avril 2005
Statut
Membre
Dernière intervention
26 mars 2012

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

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

Salut

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

bye