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 :

Appeler une méthode dans une autre (class) [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut Appeler une méthode dans une autre (class)
    Bonjour,

    Je suis passé au PHP objet depuis peu et j'essaie de faire un truc qui parrait bête .. mais j'ai du mal à trouver ma réponse sur le net (je tape peut-être pas les bon mots clés).

    Admettons cette classe simple :
    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
    class Test
    {
       private $IDMAX;
     
       function _construct()
       {
       }
     
       function A()
       {
       // Traitement SQL pour récupérer un IDMAX
       return $IDMAX;
       }
     
       function B($i)
       {
       // Traitement quelconques en BDD avec IDMAX
       }
    }
    Je pensais pouvoir appeller la function A dans la B mais comment faire ?

    Du moment qu'on est dans la même class je pensais pouvoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function B($i)
    {
        $Id_Max = A();
    }
    Il y a peut-être une autre syntaxe ? J'ai fais très peu de C++ mais il y avait une technique nomclass::fonction() ou un truc comme ca ...

    Peut-être faire une fonction spécifique qui renvois $IDMAX vu que c'est un private ?


    Merci d'avance !

  2. #2
    Membre du Club Avatar de FF_enec
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 43
    Points : 40
    Points
    40
    Par défaut
    Salut,

    Tu fais tout simplement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Id_Max = $this->A();

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    En PHP comme dans tous les langages objet, le mot clé $this fait référence à l'instance en cours. $this suivi de l'opérateur -> te permet d'accéder aux membres (propriétés ou méthodes) de l'instance.

    EX.
    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
    class Calc {
    	protected $_a;
    	protected $_b;
    	public function __construct ($a,$b) {
    		$this->_a = $a;
    		$this->_b = $b;
    	}
    	public function inc () {
    		$this->_a ++;
    		$this->_b ++;
    		return $this;
    	}
    	public function sum () {
    		return $this->_a + $this->_b;
    	}
    	public function diff () {
    		return $this->_a - $this->_b;
    	}
    	public function prod () {
    		return $this->_a * $this->_b;
    	}
    	public function div () {
    		if ($this->_b == 0)
    			throw new LogicException("Cannot divide by zero");
    		return $this->_a / $this->_b;
    	}
    }
     
    $c = new Calc(1,2);
     
    var_dump($c->prod()); // 2
    var_dump($c->sum()); // 3
    var_dump($c->inc()->inc()->prod()); // 12
    Note: lors qu'on utilise des membres static, le mot clé $this ne nous permet plus d'y accéder car ces membres sont liés à la classe et non à l'instance. Il faut utiliser le mot clé self (ou static depuis PHP 5.3).

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Mouarf j'y ai même pas penser à accéder aux fonctions avec $this comme on le fait pour les variables

    Merci beaucoup, ca fonctionne !

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Petite particularité de PHP concernant l'encapsulation (c'est toujours bon à savoir)

    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
    class Test {
    	private $_b;
     
    	public function __construct ($b) {
    		$this->_b = $b;
    	}
     
    	public function violate (Test $t) {
    		return $t->_b;
    	}
    }
     
    // Et voilà comment on viole l'encapsulation
    $t1 = new Test('hello');
    $t2 = new Test('peter');
     
    var_dump( $t1->violate($t2) );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] [POO] Appel d'une méthode dans une méthode
    Par yann18 dans le forum Langage
    Réponses: 6
    Dernier message: 20/10/2011, 09h56
  2. Appeler une méthode d'une applet dans une jsp
    Par salmoucha10 dans le forum Applets
    Réponses: 1
    Dernier message: 11/01/2011, 19h25
  3. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  4. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  5. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53

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