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 :

usage de :: et de -> dans différents contextes


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut usage de :: et de -> dans différents contextes
    Bonjour,
    Je commence en POO PHP et la syntaxe est pour le moment très labyrinthique pour moi. Comme livre je travaille avec le livre de Jean Engels qui m'a l'air bien.
    Cependant, entre les propriétés, les méthodes et les objets, le fait qu'ils utilisent telle ou telle entité ou qu'ils soient utilisés par telle ou telle autre, leurs visibilités et leurs portées, c'est devenu le chaos total dans ma tête.
    A un moment j'avais l'impression de saisir le bout de fil mais après que j'ai vue dans le livre qu'il distingue entre un contexte création objet et celui hors contexte création objet tout a été réduit en bouillie.
    J'ai donc essayé de faire un tableau pour regrouper les différents cas de figures. Je ne sais pas s'il est pertinent mais ça peut clarifier les choses et aider un novice je pense. Pouvez-vous m'aider à le compléter ou éclairer ma lanterne avec vos mots.

    Merci





    action contexte
    1 constante utilisée/appelée à l'intérieur en dehors création objet classe :: const
    2 constante utilisée/appelée à l'extérieur création objet self :: const
    3 propriété utilisée/appelée à l'intérieur en dehors création objet $objet -> propr
    4 propriété à l'extérieur création objet ?
    5 méthode utilisée/appelée à l'intérieur ? $obj -> fonction()
    6 méthode utilisée/appelée à l'extérieur en dehors création objet class :: fonction()
    7 méthode accède/utilise ? ? $this -> maVariable
    8 méthode accède/utilise ? ? ?

    PS : Ce tableau lui manque aussi le cas static …

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 642
    Points : 831
    Points
    831
    Par défaut
    Bonjour,
    Ne te contente pas d'un seul livre car d'autres sites ou livres peuvent expliquer différemment et peuvent compléter ta compréhension.
    Il existe des tutoriels sur ce site.
    Il est important de distinguer la classe qui est le plan, le modèle ou le prototype de l'objet, qui définit les propriétés et les méthodes, des instances qui sont les objets créés selon la classe.
    Exemple:
    • Soit une classe MaClasse, de préférence avec une majuscule au début
    • Soit une instance $instance = new MaClasse
    • Soit MA_CONST, définie dans la classe (mot clef const)

    $this fait référence à MaClasse à l'intérieur de la classe ou à $instance à l'extérieur de la classe.
    Pour désigner MA_CONST à l'intérieur de la classe tu fais self::MA_CONST
    Pour la désigner à l'extérieur de la classe, tu fais MaClasse::MA_CONST

  3. #3
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Merci moimp ça clarifie déjà quelques points.

    Les 2 premiers tutos du lien semblent parfaits. Je vais les travailler (le 2ème est immense, plus que 1000 pages !!!! )

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Un petit résumé :

    Instance de classe utilisation de "->"
    on créer une ou plusieurs instance d'un objet avec le mot clé new :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet = new MonObjet();
    A l'intérieur de la classe j'utilise $this pour accéder au fonction ou aux attributs de mon instance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public __construct() {
        $this->attribut = 2;
        $this->maFonction();
    }
    Tout est propre à mon instance , si une autre instance de mon objet existe , elle est complètement indépendante.

    En dehors de la classe $this se traduit par la variable à laquelle j'ai assigné mon objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $objet = new MonObjet();
    $objet->maFonction(); // possible uniquement si "maFonction" à une visibilité public
    $objet->attribut = 2; // possible uniquement si "attribut" à une visibilité public
    Utilisation static utilisation de "::"
    Lors d'une utilisation static les fonctions ou attributs sont partagé.

    Lorsqu'une fonction ou un attribut est static on y accède via l'opérateur ::
    dans la classe on utilisera le mot clé self en dehors on utilisera le nom de la classe.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class MaClassStatic
    {
        public static $attribut;
        public $attributnonStatic;
     
    	public static function maFonction() {
    		self::attribut = 2;
    	}
    	public static function autreFonction() {
    		self::maFonction();
    	}
    }
    En dehors de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaClassStatic::attribut = 5;
    MaClassStatic::maFonction();
    Attention au attribut static qui sont commun à toutes les instances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $obj1 = new MaClassStatic();
    $obj2 = new MaClassStatic();
    $obj1->attributnonStatic = 2;
    $obj2->attributnonStatic = 5;
    // Ici la valeur de attributnonStatic est différente pour chaque instance.
    MaClassStatic::attribut = 10;
    // La valeur de attribut à changé pour toutes les instances car il est static et donc commun.
    Je ne détail pas les constantes , moimp l'a déjà fait. Mais il faut les voir comme des attribut static

  5. #5
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Merci grunk, beau résumé ... ça illustre bien la complexité du vocabulaire du POO .. mais je suis convaincu qu'une fois maitrisé, ça permettra de faire plein de "prouesses" qu'un langage procédural ne pourra jamais, ou alors très difficilement, faire.

Discussions similaires

  1. [tomcat] Déploiement WAR dans un contexte différent
    Par nesbla dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 10/12/2008, 17h10
  2. "nom dupliqué dans ce contexte"
    Par lgomez dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2005, 10h49
  3. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 18h03
  4. Dessiner dans différents JPanels
    Par N@sH dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/05/2005, 16h39
  5. Réponses: 4
    Dernier message: 10/02/2005, 17h10

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