IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

debuter la poo par ou commencer?


Sujet :

Langage PHP

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 214
    Points : 623
    Points
    623
    Par défaut debuter la poo par ou commencer?
    bonjour a tous, j'essaye de debuter en poo mais ce n'est pas évident , j'ai du mal déja crée mes objets. J'essaye de faire des petits test mais cela ne fonctionne pas. Pour mes test j'ai crée objet le mot, j'aimerais d'abord essayer de défnir ce mot.
    voici le script que je suis entrain d'essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    //ce fichier s'appelle mot.class.php
    //creation de la classe mot
    <?php
      class Mot
      {
        private $lemot;//le mot
        private $caractere;//nombre de caractere
        private $majuscule;//le mot en majuscule
     
     
        public function nb_caractere()//methode calcule sont caractère
        {
     
        }
        public function majuscule()//methode pour transfomer les caractères en minuscule en majuscule
        {
     
        }
      }
    ?>
    voici le fichier moteur.php qui fait appelle à l'objet mot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    $classe="mot";
        function chargerClasse ($classe)
        {
            require $classe . '.class.php'; // On inclue la classe correspondante au paramètre passé
        }
     
        spl_autoload_register ('chargerClasse'); // On enregistre la fonction en autoload pour qu'elle soit appelée dès qu'on instanciera une classe non déclarée
     
    $cherchee_mot=new Mot();
    ?>
    jusqu'a la pas je n'ai pas d'erreur
    comment fait t-on pour crée un objet mot, par exemple cette objet s'appelle "bonjour";
    mon objet "Mot" est t'il cohérent?
    il faut défnire un constructeur c'est ca?
    merci de vos réponses

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Peut être faudrait il par commencer plus simplement, ne pas brûler les étapes.
    Je dirais qu'il serait bon de remettre à plus tard le spl_autoload_register() et la fonction chargerClasse ($classe).

    Pour faire tes essais avec ta classe Mot, et bien inclus la directement, ça évitera des éventuellement problèmes liés à l'autoload.

    Exemple, dans une page index.php qui inclus la classe Mot (dans www/classes/) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    include('classes/Mot.class.php');
    //
    $Mot = new Mot('Un mot');
    $Mot->getNombeCaractere();
    ?>
    Un exemple de classe Mot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class Mot {
    	private $lemot;      // le mot
    	private $caractere;  // nombre de caractere
    	private $majuscule;  // le mot en majuscule
     
     	// Le constructeur
    	public function __construct($lemot) {
    		$this->lemot = $lemot;
    		$this->caractere = strlen($this->lemot);
    		$this->majuscule = strtoupper($this->lemot);
    	}
     
    	// Retourne le nombre caractère
    	public function getNombeCaractere() {
    		return $this->caractere;
    	}
     
    	// Retourne le mot caractères en majuscule
    	public function getMotMajuscule() {
    		return $this->majuscule;
    	}
    }
    Mais il faut savoir ce que tu veux faire.
    Il y a pas d'obligation d'avoir un constructeur, c'est le besoin qui devra définir s'il en faut un ou pas. Il n'y a de règle en faite.
    C'est la même chose pour toutes les méthode dites "magiques" (__destruct, __get, __set, __call, etc, ...).

    Faudrait cependant essayer de faire quelque chose de concret, car la conception d'une classe part d'un besoin.
    Si on ne sais pas vraiment se qu'on veux, il sera difficile de concevoir quelque chose.

    Mais faire des essai pour se rendre compte du comment Php réagit, c'est utile, voir indispensable.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 214
    Points : 623
    Points
    623
    Par défaut
    merci de ta réponse, c'est vrait que c'est inutile de crée une classe qui ne sert à rien et que je vais laisser de côté spl_autoload_register(), mon but est de crée un moteur de recherche donc il faut que j'essaye déjà de définir quel class je doit utiliser, mais avant de doit maîtriser le fonctionnement de la classe.
    donc pour commencer je pense que je vais devoir trouver un autre class comme le formulaire?
    donc je pensais faire un formulaire et une fois que l'internaute tape un mot, on va définir que le nom de la classe mot s'appelle le mot taper?
    est ce un bon raisonnement?
    sinon comment affiche t'on le résultat une fois qu'on a fait appelle a getnombrecaracters?

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    donc je pensais faire un formulaire et une fois que l'internaute tape un mot, on va définir que le nom de la classe mot s'appelle le mot taper?
    est ce un bon raisonnement?
    J'en sais rien, car ce n'est pas suffisant comme info.

    Pour exemple, tu par du principe qu'un utilisateur saisira 1 mot.
    Déjà là, vient la question du comment être sûr qu'il y aura qu'1 seule mot, et non plusieurs.

    Autre exemple, concernant la "casse". Ceci peut être résolu du coté de la Bdd, comme utiliser un champ avec un interclassement : *_ci pour case insensitive (insensible à la casse).
    Plus besoin de se préoccuper de la casse.

    Je ne suis pas certain que créer une classe juste pour 1 mot soit utile.

    Par conte, pour plusieurs mots, peut être, car derrière se soulève plusieurs problèmes, comme un découpage de chaque mot pour par exemple faire une recherche sur chaque mot de manière individuelle.
    Faut aussi se poser la question du OU ou bien ET.
    En somme, il y aura théoriquement plus de résultats en recherchant dans une table les mots "php" OU "sql" que la totalité " php sql", ce qui revient à faire "php" ET "sql".
    Mais est ce réellement plus pertinent ? Peut être, peut être pas, ça dépend de ce qu'on veut obtenir.

    Puis faut aussi voir si tu prends en compte ou pas les éventuelles erreurs de saisie, de frappe de la part de l'utilisateur.
    Exemple : "foum" ou lieu de "forum". Manque le -> r
    Faut il rechercher le mot "forum" ? (Un truc pareil débouche sur une usine à gaz, soit dit en passant).


    En faite, la recherche c'est la combinaison entre Php et Sql, l'un ne va pas sans l'autre.


    Cependant, je me suis pas vraiment préoccupé de ce problème, je ne sais pas comment il faudrait abordé la chose.

    Ce qui est certain, c'est qu'avant de coder, il te faut avoir une idée exacte de ce que tu veux obtenir, sinon, tu ne cessera de coder, recoder, rerecoder ...
    C'est le besoin qui va t'orienter, mais pas l'inverse.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 214
    Points : 623
    Points
    623
    Par défaut
    j'ai déjà commencer ce moteur en procédural avec
    levensthein et compter le nombre de caractrère identitique avec similar_text()
    pour commencer le traitement du mot c'est directement après avoir envoyer par poste le mot a chercher:

    -de supprimer toutes les espaces et caractères
    -accent aigue et grave et autre sur les voyelle vont être supprimer
    -mettre tous en majuscule


    pour la recherche c'est en fait un seul article dans une base de donnée sur une un seul champ qui contient lettre+chiffre.

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    j'ai déjà commencer ce moteur en procédural avec
    levensthein et compter le nombre de caractrère identitique avec similar_text()
    J'ai jamais essayé "levensthein", tout juste une idée de ce que cela fait.
    Je ne pourrais pas vraiment t'aider du coup.

    Il me semble avoir lu que "levensthein" n'était pas vraiment francisé, ce qui peu causer des problèmes (pas sûr).

    Pour info, il y a quelque chose ici : L'art des « Soundex »
    Il y a peut être des idées, qui sait.

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 214
    Points : 623
    Points
    623
    Par défaut
    ok pour le conseil, pour le moment j'essaye de maitriser cette classe , pouvoir mettre des choses dedans, d'en prendre et d'en modifier.
    Si par exemple je souhaite afficher ce nouveau mot dès qu'il est crée, suis-je obliger de d'ajouter sur le contructeur afficher ce nouveau mot?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    public function __construct($lemot) {
                    $this->lemot = $lemot;
                    $this->lemot=echo'un nouveau mot a été crée:'.$lemot;
                    $this->caractere = strlen($this->lemot);
                    $this->majuscule = strtoupper($this->lemot);
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $Mot = new Mot('bonjour');
    //après se script comment afficher l'attribut $lemot?
    bien sur comme ca ca ne fonctione pas

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 214
    Points : 623
    Points
    623
    Par défaut
    ca y 'est je suis arrivé a un réponse correcte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    //voici ma classe mot
    <?php
    class Mot 
    {
    	private $lemot;      // le mot
    	private $caractere;  // nombre de caractere
    	private $majuscule;  // le mot en majuscule  
    	private $no_accent;//le mot sans accent
     
     	// Le constructeur
    	public function __construct($lemot) 
      {
    		$this->lemot = $lemot;
    		$this->caractere = strlen($this->lemot);
    		$this->majuscule = strtoupper($this->lemot);  
    		$this->no_accent = strtr($this->lemot,
        "àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ",
        "aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY");
    	}
     
     
     
    	// Retourne le nombre caractère
    	public function nb_caract() {
    		return $this->caractere;
    	}
     
    	// Retourne le mot caractères en majuscule
    	public function getMotMajuscule() {
    		return $this->majuscule;
    	}
     
        	// Retourne le mot sans accent
    	public function getNoAccent() 
      {
    		return $this->no_accent;
    	}
    }
    ?>
    ici pour le fichier qui utulise la class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    include('class/Mot.class.php');
    $Mot = new Mot('bonééjour');
    echo $Mot->getNoAccent();
    echo "<br/>";
    echo $Mot->getMotMajuscule();
    echo "<br/>";
    echo $Mot->nb_caract() ;
    ?>
    voici la réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boneejour
    BONÉÉJOUR
    9
    par contre j'ai un souci comment faire pour que le mot BONEEJOUR n'est pas d'accent, comment utiliser l'attribu qui aura fait perdre l'accent?

  9. #9
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    par contre j'ai un souci comment faire pour que le mot BONEEJOUR n'est pas d'accent, comment utiliser l'attribu qui aura fait perdre l'accent?
    C'est par ce que c'est la propriété "caractère" est mise en majuscule, et la propriété dont les caractères sont remplacés n'est pas la même "no_accent".
    Si toutes les opérations doivent être fais sur le mot, donc que les opérations se cumulent, ça doit être fait sur la propriété "lemot".


    Mais te focalise pas trop sur l'exemple que j'ai donné, car c'était juste pour exemple.
    C'est à dire que faire directement les convertions des caractères dans le constructeur n'est peut être pas la meilleure chose à faire.

    Dans un 1er temps, il serait mieux de séparer chaque traitement par des méthodes dédiées à ça.
    Après, une fois que les choses vont se dessiner, peut être qu'il y aura moyen d'optimiser.

    Essai de définir les concepts, sans obligatoirement faire tout de suite toutes les routines de codes qu'il sera à faire.

    Aussi, on peu distinguer 2 types de méthodes (parmi d'autres) :
    - Celles qui devront modifier quelque chose (une propriété par exemple). Par convention on les nomme comme : setQuelqueChose()
    - Celles qui retourne quelque chose. On les nomme : getQuelqueChose()
    Ce sont des conventions de nommages, ça a pour but d'améliorer la compréhension de son code. (il y a rien d'obligatoire, bien entendu).

    Ca pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class Mot {
    	private $mot;          // le mot
    	private $nb_caractere; // nombre de caractere
     
     	// Le constructeur
    	public function __construct($mot) {
    		$this->mot = $mot;
    	}
     
    	//------------ GETTER ----------------------------
      	// Retourne le mot
    	public function getMot() {
    		return $this->mot;
    	}
     
      	// Retourne le nombre de caractères
    	public function getNbCaractere() {
    		return $this->nb_caractere;
    	}
     
    	//------------ SETTER ----------------------------
    	// Initialise le nombre de caractère
    	public function setNbCaractere() {
    		$this->nb_caractere = strlen($this->mot);
    	}
     
    	// Remplaçant les caractères spéciaux
    	public function setNoAccent() {
    		$this->mot = strtr($this->mot,
        "àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ",
        "aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY");
     
    	}
     
    	// Met le mot en majuscule
    	public function setMajuscule() {
    		$this->mot = strtoupper($this->mot);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $mot = new Mot('réunion');
    $mot->setNbCaractere();
    $mot->setNoAccent();
    $mot->setMajuscule();
    echo 'getNbCaractere : '.$mot->getNbCaractere().'<br />';
    echo 'getMot : '.$mot->getMot().'<br />';
    Ca change un peu. Cette fois, toutes les opérations sont faites sur le "mot".
    Faut voir si ça correspond mieux à ce que tu recherche.

Discussions similaires

  1. [Divers] Par où commencer ?
    Par calogerogigante dans le forum Cobol
    Réponses: 6
    Dernier message: 03/03/2014, 11h22
  2. Par ou commencer ? je suis debutant aider moi svp!
    Par curtis2006 dans le forum Windows
    Réponses: 1
    Dernier message: 27/02/2008, 16h17
  3. par où commencer, delphiX?
    Par tima dans le forum Débuter
    Réponses: 8
    Dernier message: 07/09/2005, 14h45
  4. Par où commence un site
    Par stujava dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 31/08/2005, 10h33
  5. [Debutant(e)]passage par adresse?
    Par cap2fosse dans le forum Langage
    Réponses: 4
    Dernier message: 24/09/2004, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo