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 :

protected private public


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut protected private public
    Salut,

    Pour faire ce test, eclipsephp est pratique. ça permet de voir par exemple si une variable public est bien retourné...

    Dabord je me suis rendu compte que par défaut PHP est en public, est-ce vrai ou faux ? Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Fichier 1 : Maclass1.php
    class _Maclass1 {
        var $myVar = "trouvé"; // ici la variable n'est pas public...
    }
    
    require("Maclass1.php");
    $maclass = new _Maclass1();
    echo $maclass->myVar;
    Pour private aucun problème ça fonctionne tant avec des variables que des fonctions.
    Pour protected, PHP propose l'explication dans les docs concernant des sous-class.

    Merci

  2. #2
    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
    La visibilité d'une propriété ou d'une méthode peut être définie en préfixant la déclaration avec un mot-clé : public, protected ou private. Les éléments déclarés publics (public) peuvent être utilisés par n'importe quelle partie du programme. L'accès aux éléments protégés (protected) est limité aux classes et parents hérités (et à la classe qui a défini l'élément). L'accès aux éléments privés (private) est uniquement réservé à la classe qui les a définis.
    Objets en PHP5 : visibilité
    En gros, ce qui est public est accessible à tout le monde, ce qui est privé n'est accessible qu'à l'intérieur de la classe et ce qui est protégé est accessible à l'intérieur de la classe ou de ses enfants.
    Si on ne définit pas la visibilité d'une méthode, elle est automatiquement considéré comme publique. Il faut obligatoirement définir la visibilité d'un attribut.

    Au passage, le mot clé var n'est plus utilisé en PHP5, à la place on définit directement l'attribut avec sa visibilité.
    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]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Objets en PHP5 : visibilité
    En gros, ce qui est public est accessible à tout le monde, ce qui est privé n'est accessible qu'à l'intérieur de la classe et ce qui est protégé est accessible à l'intérieur de la classe ou de ses enfants.
    Exemple:

    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
    class Maclass1 {
    
     private $myvar = "hello";
     protected $myvar2 = "hello2";
    
     public function...
     $this->myvar; // trouvé car private
     $this->myvar2; // trouvé car protected
    
    }
    
    class Maclass2 extend Maclass1 {
    
     public function...
     $this->myvar2; // trouvé car protected
     $this->myvar; // trouvé quand même ???
    
    }
    pas très logique non?

  4. #4
    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
    Euh... par "trouvé" tu entends quoi ?
    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]

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    L'exemple suivant est plus parlant:

    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
    <?php
    
      class Classe1 {
    
        public $variablePublic = "Je suis public";
        private $variablePrivate = "Je suis private";
        protected $variableProtected = "Je suis protected";
    
        function getVariablePrivate(){
            return $this->variablePrivate;
        }
      }
    
      class SousClasse extends Classe1 {
    
        function accesPrivate(){
            echo $this->variablePrivate;
        }
    
        function accesProtected(){
            echo $this->variableProtected;
        }
      }
    
      $demo = new SousClasse();
      echo $demo->accesProtected();  // « protected » fait la même chose que « public »  // Affiche "Je suis protected"
    
      echo $demo->accesPrivate();
      // Erreur d'accès
    
    ?>
    Cette exemple démontre que l'autocomplétion de éclipsephp est fausse, car elle retourne ->variablePrivate alors que on se trouve dans une sous classe et moi j'ai perdu la matiné...

Discussions similaires

  1. [unit test] methode protected / private
    Par ZaaN dans le forum C#
    Réponses: 2
    Dernier message: 10/03/2008, 16h10
  2. Héritage : private/public/protected
    Par le Daoud dans le forum Langage
    Réponses: 5
    Dernier message: 24/10/2007, 13h47
  3. Réponses: 16
    Dernier message: 30/05/2007, 23h07
  4. problème de private , public , protected
    Par florantine dans le forum C++
    Réponses: 3
    Dernier message: 17/01/2006, 20h51
  5. Private / Public
    Par Naruseb dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 18/10/2005, 19h22

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