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 :

Class débutant - affichage


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Class débutant - affichage
    Bonjour ou bonsoir, une class qui est supposé afficher.

    Solde 0 par défaut. Ma fonction c'est d'afficher le montant,
    et je demande d'afficher 55 et rien ne s'affiche. Pourquoi?

    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
    <?php
    class Compte
    {
            public $solde = 0;
     
            function aff($montant)
            {
                    $this->solde = $montant;
            }
     
    }
     
    $moncompte = new Compte;
    echo $moncompte->aff(55);
    ?>
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    C'est tout bête, ta fonction ne renvoie rien. Rajoute un return $this->solde et echo aura quelque chose à afficher.

    Mais tu devrais plutot séparer la lecture et l'écriture. Tu as peut être entendu parler de setters et de getters

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       function setSolde($montant) {
                    $this->solde = $montant;
            }
     
            function getSolde() {
                    return $this->solde;
            }
     
    $moncompte->setSolde(1000);
    echo $moncompte->getSolde();

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    C'est bien comme façon de faire?

    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
    <?php
    class Compte
    {
            private $solde;
     
            function setSolde($montant) {
                    $this->solde = $montant *3;
            }
     
            function getSolde() {
                    return $this->solde; 
            }
     
     }
     
    $moncompte = new Compte;
    $moncompte->setSolde(500);
     
    echo $moncompte->getSolde() *2;
     
    ?>
    A partir de là, je peux surement faire une calculatrice de base j'imagine?
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Presque :
    pense à toujours rajouter la visibilité aux fonctions : public | protected | private.
    Ensuite le nommage de ta fonction setSolde() est incorrecte car le code de ta fonction ne correspond pas à une simple affectation de solde ! C'est un coup à ramer après pour savoir d'où un montant multiplié par 3 peut bien provenir.
    Sans compter que du coup la compréhension du code ne s'en trouve pas facilitée...

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour. J'ai suivi un tutoriel dans la même ligné que ce topic,

    bon. ça affiche encore rien.

    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
    <?php
     
    class Utilisateur {
        private $nom;
        private $prenom;
     
        public function __construct() {
        }
     
        public function getFullName($nom,$prenom){
            return $this->nom.' '.$this->prenom;
        }
     
    }
     
    $utilisateur = new Utilisateur();
    echo $utilisateur->getFullName('nom','prenom');
     
    ?>
    On dirais que la notion de Classe et Objet, c'est pas vraiment pour moi. J'arrive à rien. Pourtant, ça fait longtemps que je suis familier avec PHP.

    Si je peux avoir de l'aide sur cela.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Plutôt quelque chose comme ça :
    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
    <?php
     
    class Utilisateur {
        private $nom;
        private $prenom;
     
        public function __construct($nom, $prenom) {
    		// affectation du nom
    		$this->nom = $nom;
    		// affectation du prénom
    		$this->prenom = $prenom;
        }
     
        public function getFullName(){
            return $this->nom.' '.$this->prenom;
        }
     
    }
     
    $utilisateur = new Utilisateur('nom','prenom');
    echo $utilisateur->getFullName();
     
    ?>
    Tu renseignes le nom et le prénom à la création et ensuite tu affiches les infos stockées dans l'objet.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    J'ai vu que je pouvais faire comme ceci aussi en essayant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    class Utilisateur {
        public function getFullName($nom,$prenom){
            return $nom.' '.$prenom;
        }
    }
     
    $utilisateur = new Utilisateur();
    echo $utilisateur->getFullName('Paul','Dupon');
    echo $utilisateur->getFullName('Léa','Dupon');
     
    ?>
    Est-ce aussi valable?
    Pourquoi utiliser le __construct?

    Je tiens à dire merci pour l'aide.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    va falloir que tu investisses dans un livre parce que là c'est pas gagné gagné : L'orienté objet

    Allez bon courage

  9. #9
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    J'évolue lentement!! Mais, je suis tout de même content de faire un pas.
    Surtout quand y a peu de temps, je savais rien la dessus.
    J'ai beaucoup de tutoriels de plusieurs sites, et dans le forum, je ne fais
    que valider mes connaissances.

    C'est juste que je n'ai pas cerner concernant la différence entre la fonction _construct par rapport au fonction "public function x()". Même en lisant.

    Merci quand même pour les réponses. :-)
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    La fonction __construct() est ce qu'on appelle le constructeur d'instance : quand dans ton code tu fais : $cls = new UneClasse() le mot clé new indique au moteur PHP de chercher une fonction constructeur au sein du code source de UneClass et s'il en trouve une, il va exécuter son code source afin de construire convenablement l'instance.

    Donc si ton constructeur est paramétré comme dans le code de Celira:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Utilisateur 
    {
        private $nom;
        private $prenom;
     
        public function __construct($nom, $prenom) 
        {
            // affectation du nom
            $this->nom = $nom;
            // affectation du prénom
            $this->prenom = $prenom;
        }
    }
    Tu as l'obligation lors de l'instanciation de la classe de respecter le prototype du constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $usr = new Utilisateur('DUPOND', 'Lajoie');
    En conclusion, le constructeur est une fonction comme une autre de la classe sauf qu'il est automatiquement exécuté à la construction d'une instance de classe alors qu'une méthode quelconque n'est exécutée que si elle est appelée explicitement.

    Il est possible d'interdire d'instancier une classe en rendant son constructeur privé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private function __construct()
    Tu devrais revoir les bases je pense, c'est le B.A.BA de la POO.

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

Discussions similaires

  1. [Débutant] Affichage d'un video avi sur le web
    Par oumani dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 06/02/2006, 13h47
  2. [Débutant] affichage opengl dans un TPanel
    Par minnit_s dans le forum OpenGL
    Réponses: 1
    Dernier message: 01/01/2006, 23h03
  3. [Débutant] Affichage d'une grille
    Par Mathieu.J dans le forum OpenGL
    Réponses: 25
    Dernier message: 13/06/2004, 19h38
  4. [QuickReport][Débutant] Affichage d'un graphique
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/03/2004, 09h03
  5. [Débutant] Affichage impossible en local
    Par Alberto dans le forum ASP
    Réponses: 2
    Dernier message: 29/11/2003, 16h45

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