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 :

Quelle est la bonne procédure pour créer un objet ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut Quelle est la bonne procédure pour créer un objet ?
    Bonjour,

    J'ai un peu de mal à m'y retrouver avec les 1001 tutos PHP qui expliquent comment créer un objet.
    Bien sûr, je crée une classe et des fonctions et à partir de là, un objet.

    Ca, on le retrouve dans tous les tutos.

    Mais après, ça change à chaque fois : tantôt un constructeur, tantôt pas de constructeur, tantôt des getters, tantôt des setters, tantôt des getters sans setter voire des gâteaux sautés mal construits, ce qui ne fait pas très classe.


    Alors donc, quelle est la bonne procédure ? Faut-il toujours un constructeur et des getters dans la classe ? Et même si ça n'est pas toujours obligatoire, est-ce toujours préférable, comme le sucre dans le getter ?


    Merci d'avance pour vos réponses croustillantes.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    pour créer un objet, tu peux essayer... la poterie.




  3. #3
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    On récolte ce qu'on sème...


    Bon une autre. Je suis en train de lire un topic, on y trouve cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Foo {
      protected $taille;
      protected $age;
     
      public function getTaille() { return $this->taille; }
      public function setTaille($value) { $this->taille = $value; }
     
     public function getAge() { return $this->age; }
     public function setAge($value) { $this->age = $value; }
    }
    Questions : Pourquoi dans getTaille() il n'y a pas de variable dans la parenthèse alors que dans setTaille(($value), il s'en trouve une ,

    Des fois, les petites questions comme ça cachent de gros morceaux de connaissance.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je n'y connais rien en POO, donc :



    Quant à la question :
    • "get......" -> on récupère/retourne (d'où le return) la valeur de l'objet
    • "set......" -> on affecte une valeur, qu'on passe donc en parametre


    A vrai dire, ça ne sert à rien de parcourir 1001 tutos, si tu n'as jamais testé toi-même un seul exemple pratique...

    Ce n'est pas en regardant un catalogue de vélos, qu'on peut espérer gagner le Tour de France...
    Dernière modification par Invité ; 30/06/2018 à 16h45.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 82
    Par défaut Private, protected, public
    @Supracode, Dans ta classe, taille et age sont protégés, tu ne peut pas y accéder directement ( seule l'instance de cette classe et ses dérivés le peuvent ), tu créé donc des fonctions publiques d'accès, les getter et setter , qui renvoie ou modifie ces valeurs.
    De plus, si age avait été privé, seule l'objet lui même peut y accéder, même un objet hérité ne le pourrait pas.
    C'est assez important car cela permet de "verrouiller" certaine partie de ton programme, comme par exemple éviter qu'un objet quelconque puisse modifier directement la valeur User->isAdmin ...

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 378
    Par défaut
    Je vais t'expliquer comment cela se passe dans un langage comme le C++.

    Un objet va contenir des méthodes (des fonctions) et des propriétés (des variables).

    Un objet peut avoir des méthodes/propriétés public, accès illimités à ceux-ci, private, seul l'objet peut y accéder, protected, seuls l'objet et ses dérivations peuvent y accéder. Un objet peut contenir des éléments public, private, et protected.

    Un constructeur est une fonction qui est déclenchée lors de la création de l'objet, elle va te servir à par exemple initialiser une propriété par défaut. Si tu n'en mets pas, c'est que tu n'as rien à initialiser. tu auras alors un constructeur implicite. Si ton objet hérite d'un autre, le constructeur du tien va d'abord appeler celui du parent.
    Le destructeur est appelé lors de la destruction de l'objet, c'est dans celui-ci que tu vas libérer les ressources utilisés par ton objet et qui n'ont pas déjà été libérés (exemple : fermeture de fichier). C'est la même chose, il va appeler les destructeurs des classes parentes, et celui des différents membres imbriqués.

    Un getter et un setter vont te permettre de récupérer une valeur ou en affecter une à des propriétés qui ne sont pas public. Ce sont donc les fonctions internes à l'objet qui vont affecter ou retourner la valeur de la propriété concernée. Cela est intéressant par exemple pour contraindre une variable. Si je prend le fameux exemple de la voiture souvent utilisé qui contient une propriété vitesse actuelle, tu auras un setter acceleration, qui va augmenter la propriété avec des contraintes comme la vitesse maximale, et/ou une progression dans le temps de celle-ci, et qui va vérifier que tu n'es pas déjà entrain de décélérer, ou stopper la décélération si tu accélères.

    Lis bien les documentations, car d'une part tu auras plus d"infos, et d'autre part, même si ce que j'ai dit pour le C++ doit être globalement valable pour php, tu dois avoir des nuances.

    Exemple que je viens de voir dans la doc :
    Note: Les constructeurs parents ne sont pas appelés implicitement si la classe enfant définit un constructeur. Si vous voulez utiliser un constructeur parent, il sera nécessaire de faire appel à parent::__construct() depuis le constructeur enfant. Si l'enfant ne définit pas un constructeur alors il peut être hérité de la classe parent, exactement de la même façon qu'une méthode le serait (si elle n'a pas été déclarée comme privée).
    Ceci est différent en C++.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Quel est le meilleur SGBD pour Delphi ?
    Par Giovanny Temgoua dans le forum Bases de données
    Réponses: 58
    Dernier message: 02/04/2020, 21h21
  2. Réponses: 2
    Dernier message: 26/10/2014, 19h11
  3. Quel est le meilleur langage pour la portabilité : Windows & Linux (voire Mac) ?
    Par iubito dans le forum Débats sur le développement - Le Best Of
    Réponses: 57
    Dernier message: 27/11/2007, 00h45
  4. Réponses: 9
    Dernier message: 14/05/2006, 00h43
  5. quel est le Meilleur language pour piloter le port serie ?
    Par flyfab dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 21/07/2003, 11h03

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