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 :

[POO] :: vs -> différence ou pas ?


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Points : 204
    Points
    204
    Par défaut [POO] :: vs -> différence ou pas ?
    Bonjour à a tous,

    Une question existentielle qui n'en est pas.
    Dans la syntaxe objet on peut voir deux types d'appel aux méthodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = $instance->méthode();
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = $instance::méthode();
    Y a t-il une différence significative ? Y a t-il une syntaxe à privilégier plutôt qu'une autre ?

    Merci d'avance pour vos réponses

  2. #2
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Pour la première, on a besoin d'une instance de l'objet pour faire appel à la méthode. Dans la seconde non. C'est de la POO, à choisir en fonction de ses besoins.

    Quelqu'un complètera :p.

  3. #3
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Points : 597
    Points
    597
    Par défaut Oui, difference
    Dans le premier exemple, on execute la methode d'un objet.

    Dans le deuxieme, on execute une fonction dans un espace de nom.

    La deuxieme methode est plus rapide mais attention, on perd beaucoup de fonctionnalités de la programmation objet.

    En faite, il faut voir les 2 notations comme 2 mécanismes différents. Renseigne toi sur le concept d'espace de nom.

  4. #4
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Oui c'est différent car utilisation différente de l'objet

    Méthode statique

    Ces méthodes peuvent être appelé sans l'instanciation de la class.

    nomclass::nom_méthode

    L'opérateur de résolution de portée {::}

    En résumé, on peut appeler la class sans l'opérateur new.
    Cette méthode ne contenant pas de this peut-être appelé comme une méthode statique. Le this n'est donc pas autorisé dans une méthode statique. Dans une fonction on peut définir une variables static. La porté de vie de la variable dure tant que la page est ouverte. Cependant la porté de la variable ne peut être faite qu'au niveau de la fonction.

  5. #5
    Membre actif Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Points : 204
    Points
    204
    Par défaut Je résume
    Donc je résume...

    OUI il y a une différence et de taille !
    Dans la cas de -> on fonctionne de manière standard avec instanciation puis appel des méthodes...
    Dans l'autre, pas nécessité d' instanciation. Donc pas de référence à une instance précise... il faut donc que la méthode ne nécessite aucune référence à l'objet auquel elle appartient ($this->_id) par ex...

    Enfin, je vais me renseigner sur les espaces de nom

    Merci de toutes ces réponses, j'attends encore un peu avant de considérer la question comme résolue...

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Oui, c'est bien cela. Avec l'opérateur de résolution de portée, il faut typiquement une déclaration "static" tandis qu'avec "->", on utilise une instance de la classe.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Pour les espaces de noms, effectivement ils utiliseront (dans le futur!) l'opérateur ::. Cependant les espaces de noms sont utilisés pour contextualiser / organiser une classe.
    Un peu à la manière d'un dossier, il va permettre le regroupement de plusieurs classes.
    A contrario, actuellement toutes les classes déclarées le sont aux mêmes niveaux, dans le même contexte.

    Se sera une bonne chose car bien souvent on aimerai appeler une classe <Abonné> par exemple, pour représenter un abonné de newsletter.
    Mais on aimerai aussi avoir une autre classe <Abonné>, pour représenter des Abonnés à un magazine ou je ne sais quoi.
    Avec les espaces de noms ce conflit disparait puisque chacune de ces classes seront rangées dans deux espace de noms distinct.
    On imaginerait les deux espaces de noms suivant :
    - Newsletter et magazine,
    Nos classes prendraient alors place dans Newsletter::Abonnes et Magazine::Abonnes.

    L'exemple n'est peut être pas parfait, mais je pense que c'est une bonne illustration.

    bye

  8. #8
    Membre actif Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Points : 204
    Points
    204
    Par défaut intéressant Espace de nom
    Merci pour tous ces éclaircissements.

    On attend les espaces de nom avec impatience maintenant !
    Question résolue !!

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Tu peux déjà essayer les espaces de noms avec PHP 5.3 ou 6.0 : http://snaps.php.net/

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

Discussions similaires

  1. [POO] le destructeur ne fonctionne pas
    Par oswalidos dans le forum C++
    Réponses: 8
    Dernier message: 25/10/2008, 10h46
  2. [POO] evenement onclick ne fcontionne pas sous IE
    Par Livozz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/08/2008, 08h08
  3. [POO] Clonage d'objet ou pas ?
    Par grunk dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2008, 23h42
  4. [POO] Héritage qui ne fonctionne pas
    Par eexit dans le forum Langage
    Réponses: 11
    Dernier message: 07/05/2008, 15h58
  5. [POO] Event marche sous IE, pas FF
    Par gloubi dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/02/2008, 13h43

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