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 :

Récupérer une constante de plusieurs lignes ET une méthode dans un tableau en PHP-POO


Sujet :

Langage PHP

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut Récupérer une constante de plusieurs lignes ET une méthode dans un tableau en PHP-POO
    Bonjour.

    J'ai deux petit et j'aimerais que vous m'éclairiez.

    1 - Comment récupérer une CONSTANTE de plusieurs lignes définie dans une classe en PHP-POO ??? Je voudrais utiliser la fonction PUNCT de la ligne 4 sur la ligne 21 de mon code ci-après:

    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
    class PhraseParser
    {
     
    	define('PUNCT', "\.|\,|\:|\;|\"|\'|\[|\/|\%|\?|-|" .
    		"\]|\{|\}|\(|\)|\!|\||।|\&|\`|" .
    		"\’|\‘|©|®|™|℠|…|\/|\>|,|\=|。|)|:|、|" .
    		"”|“|《|》|(|「|」|★|【|】|·|\+|\*|;".
    			"|!|—|―|?|!|،|؛|؞|؟|٪|٬|٭");
    	/**
         * If that many exist, the minimum number of results to get
         * and group before trying to compute the top x (say 10) results
         */
        define('MIN_RESULTS_TO_GROUP', 200);
    	/** locale sub-namespace */
    	define('NS_LOCALE', NS . "locale\\");
     
    	public static function removePunctuation($sentences)
         {
            if (is_array($sentences)) {
                foreach ($sentences as $key => $sentence) {
                    $sentences[$key] = trim(preg_replace('/[' . PUNCT . ']+/iu',	
                        ' ', $sentence));
                }
            }
            return $sentences;
         }
    QUESTION 1: Comment donc récupérer au niveau de la ligne 21, cette constante PUNCT définie sur la ligne 4 ???

    2 - Mon deuxième souci est similaire au premier à une petite différence prêt. En fait, j'ai créé une fonction getBot() dans la classe suivante. Mais je souhaiterais récupérer la valeur retournée par cette fonction dans un tableau du constructeur de la classe contenant cette même méthode getBot au lieu de réécrire la même valeur comme je l'ai fait dans le code ci-après:

    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 DomDocumentParser {
     
    	private $doc;
     
    	public function __construct($url) {
     
    		$options = array(
    			'http'=>array(
    				'method'=>"GET", 
    				'header'=>"User-Agent: hBot/0.1\n"
    			)
    		);
    		$context = stream_context_create($options);
     
    		$this->doc = new DomDocument('1.0', 'UTF-8');
    		@$this->doc->loadHTML(@file_get_contents($url, false, $context));
     
    	}
     
    	// Create an array of all of the "a" tags.
    	public function getBot() {
    		return "hBot/0.1";
    	}
    QUESTION 2: Comment appeler la méthode getBot() au niveau du User-agent de la ligne 10 de mon code ci-dessus ???

    Eclairez-moi s'il vous plaît sur ces deux point très importants pour moi car je suis confus à l'utilisation des appels de constantes et méthodes dans mon cas.

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 020
    Par défaut
    Un define() n'a rien à faire dans une classe. Pour définir une constante de classe on utilise const MACONSTANTE = 'trucmuche'; et pour y accéder de l'intérieur de la classe on utilise self::MACONSTANTE.

    D'autre part, plutôt que de se fatiguer à faire la liste de toutes les entités html ou caractères ascii dont on a connaissance et qui sont des caractères de ponctuation, mieux vaut convertir toutes les entités en caractères et utiliser la classe de caractères pour la ponctuation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
    $str = preg_replace('~\pP+~u', ' ', $str);

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 020
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $options = array(
        'http'=>array(
            'method'=>"GET", 
            'header'=>"User-Agent: hBot/0.1\n"
        )
    );
    $context = stream_context_create($options);
     
    $this->doc = new DomDocument('1.0', 'UTF-8');
    @$this->doc->loadHTML(@file_get_contents($url, false, $context));
    Arrrghh!!!

    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
    $options = array(
        'http'=>array(
            'method'=>"GET", 
            'header'=>"User-Agent: hBot/0.1\n"
        )
    );
     
    $context = stream_context_create($options);
     
    libxml_set_streams_context($context);
     
    libxml_use_internal_errors(true);
     
    $this->doc = new DOMDocument;
    $this->doc->loadHTMLFile($url);
    Il est inutile de donner des paramètres au constructeur de DOMDocument avant de charger un fichier ou une chaîne car la nature du document (HTML ou XML) dépendra de la méthode de chargement choisie (load, loadHML) et la version du document et son encodage sont déterminés par le contenu chargé. (Donc les paramètres donnés seront écrasés systématiquement à l'appel d'une de ces méthodes.)

    Planquer des warnings avec @, ça ne se fait plus depuis 15 ans. libxml_use_internal_errors(true); empêche l'affichage automatique des erreurs HTML/XML mais en plus permet de les gérer via libxml_get_errors().

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Merci pour votre réponse. MAIS ma question de modifier le nom de l'User-agent par la valeur retournée par la méthode getBot() n'a pas été répondue sauf si c'est moi qui ne comprends pas.
    En fait, ma préoccupation N°2 était de savoir comment modifier le hBot/0.1 qu'on retrouve dans 'header'=>"User-Agent: hBot/0.1\n":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $options = array(
        'http'=>array(
            'method'=>"GET", 
            'header'=>"User-Agent: hBot/0.1\n"
        )
    );
    par la valeur de la méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function getBot() {
    		return "hBot/0.1";
    	}
    ???

    Aidez-moi s'il vous plaît à remplacer le hBot/0.1 du 'header'=>"User-Agent: hBot/0.1\n" par l'appel à la méthode getBot() ???

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 020
    Par défaut
    Tu dois lire un tutoriel de base sur la poo en PHP, et ça je ne peux pas le faire à ta place.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Tu dois lire un tutoriel de base sur la poo en PHP, et ça je ne peux pas le faire à ta place.
    En fait, j'avais déjà fait appel à cette méthode en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'header'=>"User-Agent: this->getBot()\n"
    Et le résultat est ça me retourne l'erreur Parse Error: syntax errer, unexpected '->' ((T_OBJECT_OPERATOR), expecting')' au lieu de la valeur de cette méthode getBot() que je cherche à y insérer.

    C'est pourquoi je demande ici votre aide comme ça, je pourrais comparer à ce que j'ai fait et voir où est mon erreur.

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Mais quand je fais, self::getBot() tout marche à perfection.

    Merci beaucoup pour votre soutien.

  8. #8
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 020
    Par défaut
    Ça "marche", mais ce n'est pas encore ça. Mieux vaut corriger ton erreur de syntaxe du post précédent.

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Justement. C'est l'idée. Sauf que je ne sais pas comment m'y prendre pour corriger l'erreur de syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse Error: syntax errer, unexpected '->' ((T_OBJECT_OPERATOR), expecting')'

    Aidez-moi donc. Ce serait bien de le savoir et parfaire l'appel de ma méthode getBot avec this.

    Comment donc appeler la méthode getBot simplement sans voir afficher cette erreur de syntaxe ???

Discussions similaires

  1. Réponses: 26
    Dernier message: 19/03/2018, 21h16
  2. Récupérer une valeur dans un tableau de tableau de JSON
    Par ecnerrolf dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 27/06/2014, 10h03
  3. [HTML] Récupérer une valeur dans un tableau - DIV
    Par frtou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 02/09/2008, 10h12
  4. Récupérer une valeur dans un tableau ?
    Par le polak dans le forum Excel
    Réponses: 1
    Dernier message: 26/05/2008, 18h08
  5. Récupérer une valeur dans un tableau
    Par Jeren dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2008, 10h03

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