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 :

membre d'une classe en private ?


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut membre d'une classe en private ?
    Bonjour,

    J'aimerais savoir quelle est le niveau de visibilité qu'on doit donner à un attribut d'une classe en PHP ?
    J'ai mis tous les attributs à private puis j'ai fait des getters, est ce correcte ?

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Salut !

    Tout à fait, c'est correct

    Pour plus d'info :
    Les accès en PHP5
    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Si les mots clés public, private et protected existent, c'est pour qu'on s'en serve

    C'est correct à condition de respecter les règles suivantes:
    • si les getters/setters n'apportent rien de concrêt (il permettent juste la modification des propriétés sans faire aucun traitement ni contrôle) alors il vaut mieux que les propriétés en question soient publiques
    • si les membres doivent être visibles par les classes filles, il faut impérativement utiliser protected
    • si les membres n'ont pas à être visible dans les classes filles, il faut impérativement utiliser private
    • le mot clé public est implicite, le mot clé var peut s'y substituer pour les propriétés (à éviter cependant, je préfère largement mentionner public, c'est plus lisible)
    • la visibilité d'un membre ne peut pas être redéfinie dans la classe fille (illustré dans l'exemple #1)
    • en PHP, il est possible de donner une visibilité virtuellement publique sur des membres privés/protégés à l'aide des méthodes magique __get,__set et __call (voir exemple #2)


    Exemple #1 sur la visibilité
    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
    interface A {
    	public function foo ();
    }
     
    class B implements A {
    	protected function foo () {} // interdit
    }
     
    abstract class C {
    	public function foo () {}
    	abstract public function bar ();
    }
     
    class D extends C {
    	protected function foo () {} // interdit
    	protected function bar () {} // interdit
    }
    Exemple #2 sur les méthodes magiques
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    class A {
    	public $a = 1;
    	protected $b = 2;
    	private $c = 3;
    }
     
    $a = new A;
    $a->a = 2; // autorisé
    $a->b = 3; // interdit
    $a->c = 4; // interdit
     
    class B {
    	public $a = 1;
    	protected $b = 2;
    	private $c = 3;
     
    	public function __get ($key) {
    		if ($key == 'a' || $key == 'b' || $key == 'c')
    			return $this->$key;
    		throw new InvalidArgumentException("$key not found");
    	}
     
    	public function __set ($key, $value) {
    		$this->__get($key); // comme ça on évite de réécrire le contrôle
    		$this->$key = $value;
    	}
    }
     
    $b = new B;
    $b->a = 2; // autorisé
    $b->b = 3; // autorisé grâce à __set et __get
    $b->c = 4; // autorisé grâce à __set et __get
     
    var_dump($b);
     
    class C {
     
    	public function foo () {
    		return __METHOD__;
    	}
     
    	protected function bar () {
    		return __METHOD__;
    	}
     
    	public function __call ($method, $args) {
    		if (!is_callable(array($this, $method)))
    			throw new BadMethodCallException("$method not found");
    		return $this->$method();
    	}
    }
     
    $c = new C;
    echo $c->foo(); // autorisé
    echo $c->bar(); // autorisé par __call
    Voilà, je crois que j'ai fait le tour dans les grandes lignes. Pour les reste, y'a toujours le manuel

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

Discussions similaires

  1. [MFC] rendre un thread membre d'une classe.
    Par giova_fr dans le forum MFC
    Réponses: 6
    Dernier message: 20/02/2006, 18h37
  2. Objet vector<Type> membre d'une classe
    Par Chewbi dans le forum SL & STL
    Réponses: 3
    Dernier message: 16/02/2006, 17h12
  3. Pointeur sur des fonctions membres d'une classe
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 15/02/2006, 11h35
  4. [VB.NET]Reflexion lister les membres d'une classe ...presque
    Par lucie.houel dans le forum ASP.NET
    Réponses: 19
    Dernier message: 20/09/2005, 13h49
  5. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15

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