Manuel PHP

Visibilité

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.

Visibilité des membres

Les classes membres doivent être définies comme publiques, protégées ou privées.

Example#1 Déclaration des membres

  1. <?php
  2. /**
  3. * Définition de MyClass
  4. */  
  5. class MyClass  
  6. { 
  7.    public $public = 'Public'; 
  8.    protected $protected = 'Protected'; 
  9.    private $private = 'Private'; 
  10.  
  11.    function printHello() 
  12.    { 
  13.       echo $this->private; 
  14.       echo $this->protected; 
  15.       echo $this->private; 
  16.    }  
  17. }  
  18.  
  19. $obj = new MyClass();  
  20. echo $obj->public; // Fonctionne
  21. echo $obj->protected; // Erreur fatale
  22. echo $obj->private; // Erreur fatale
  23. $obj->printHello(); // Affiche Public, Protected et Private
  24.  
  25.  
  26. /**
  27. * Définition de MyClass2
  28. */  
  29. class MyClass2 extends MyClass  
  30. { 
  31.    // On peut redéclarer les éléments publics ou protégés, mais pas ceux privés
  32.    protected $protected = 'Protected2'; 
  33.  
  34.    function printHello() 
  35.    { 
  36.    echo $this->public; 
  37.    echo $this->protected; 
  38.    echo $this->private;  
  39. }  
  40. }  
  41.  
  42. $obj2 = new MyClass2();  
  43. echo $obj->public; // Fonctionne
  44. echo $obj2->private; // Indéfini
  45. echo $obj2->protected; // Erreur fatale
  46. $obj2->printHello(); // Affiche Public, Protected2 et non Private
  47.  
  48. ?> 

Note: La méthode de déclaration de variable en PHP 4 avec le mot-clé var est toujours supportée pour des raisons de compatibilité (en tant que synonyme du mot-clé public). Depuis PHP 5.1.3, son utilisation génère une erreur de niveau E_STRICT.

Visibilité des méthodes

Les méthodes des classes doivent être définies en tant que publiques, privées ou protégées. Les méthodes sans déclaration seront automatiquement définies comme étant publiques.

Example#2 Déclaration d'une méthode

  1. <?php
  2. /**
  3. * Définition de MyClass
  4. */  
  5. class MyClass  
  6. { 
  7.    // Les contructeurs doivent être publics
  8.    public function __construct() { } 
  9.  
  10.    // Déclaration d'une méthode publique
  11.    public function MyPublic() { } 
  12.  
  13.    // Déclaration d'une méthode protégée
  14.    protected function MyProtected() { } 
  15.  
  16.    // Déclaration d'une méthode privée
  17.    private function MyPrivate() { } 
  18.  
  19.    // Celle-ci sera publique
  20.    function Foo() 
  21.    { 
  22.       $this->MyPublic(); 
  23.       $this->MyProtected(); 
  24.       $this->MyPrivate(); 
  25.    }  
  26. }  
  27.  
  28. $myclass = new MyClass;  
  29. $myclass->MyPublic(); // Fonctionne
  30. $myclass->MyProtected(); // Erreur fatale
  31. $myclass->MyPrivate(); // Erreur fatale
  32. $myclass->Foo(); // Public, Protected et Private fonctionnent
  33.  
  34.  
  35. /**
  36. * Définition de MyClass2
  37. */  
  38. class MyClass2 extends MyClass  
  39. { 
  40.    // Celle-ci sera publique
  41.    function Foo2() 
  42.    { 
  43.       $this->MyPublic(); 
  44.       $this->MyProtected(); 
  45.       $this->MyPrivate(); // Erreur fatale
  46.    }  
  47. }  
  48.  
  49. $myclass2 = new MyClass2;  
  50. $myclass2->MyPublic(); // Fonctionne
  51. $myclass2->Foo2(); // Public et Protected fonctionnent, non pas Private
  52.  
  53. class Bar  
  54. { 
  55.    public function test() { 
  56.       $this->testPrivate(); 
  57.       $this->testPublic(); 
  58.    } 
  59.  
  60.    public function testPublic() { 
  61.       echo "Bar::testPublic\n"; 
  62.    } 
  63.  
  64.    private function testPrivate() { 
  65.       echo "Bar::testPrivate\n"; 
  66.    }  
  67. }  
  68.  
  69. class Foo extends Bar  
  70. { 
  71.    public function testPublic() { 
  72.       echo "Foo::testPublic\n"; 
  73.    } 
  74.  
  75.    private function testPrivate() { 
  76.       echo "Foo::testPrivate\n"; 
  77.    }  
  78. }  
  79.  
  80. $myFoo = new foo();  
  81. $myFoo->test(); // Bar::testPrivate
  82.             // Foo::testPublic
  83. ?> 


Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog