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
- <?php
- /**
- * Définition de MyClass
- */
- class MyClass
- {
- public $public = 'Public';
- protected $protected = 'Protected';
- private $private = 'Private';
- function printHello()
- {
- echo $this->private;
- echo $this->protected;
- echo $this->private;
- }
- }
- $obj = new MyClass();
- echo $obj->public; // Fonctionne
- echo $obj->protected; // Erreur fatale
- echo $obj->private; // Erreur fatale
- $obj->printHello(); // Affiche Public, Protected et Private
- /**
- * Définition de MyClass2
- */
- class MyClass2 extends MyClass
- {
- // On peut redéclarer les éléments publics ou protégés, mais pas ceux privés
- protected $protected = 'Protected2';
- function printHello()
- {
- echo $this->public;
- echo $this->protected;
- echo $this->private;
- }
- }
- $obj2 = new MyClass2();
- echo $obj->public; // Fonctionne
- echo $obj2->private; // Indéfini
- echo $obj2->protected; // Erreur fatale
- $obj2->printHello(); // Affiche Public, Protected2 et non Private
- ?>
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
- <?php
- /**
- * Définition de MyClass
- */
- class MyClass
- {
- // Les contructeurs doivent être publics
- public function __construct() { }
- // Déclaration d'une méthode publique
- public function MyPublic() { }
- // Déclaration d'une méthode protégée
- protected function MyProtected() { }
- // Déclaration d'une méthode privée
- private function MyPrivate() { }
- // Celle-ci sera publique
- function Foo()
- {
- $this->MyPublic();
- $this->MyProtected();
- $this->MyPrivate();
- }
- }
- $myclass = new MyClass;
- $myclass->MyPublic(); // Fonctionne
- $myclass->MyProtected(); // Erreur fatale
- $myclass->MyPrivate(); // Erreur fatale
- $myclass->Foo(); // Public, Protected et Private fonctionnent
- /**
- * Définition de MyClass2
- */
- class MyClass2 extends MyClass
- {
- // Celle-ci sera publique
- function Foo2()
- {
- $this->MyPublic();
- $this->MyProtected();
- $this->MyPrivate(); // Erreur fatale
- }
- }
- $myclass2 = new MyClass2;
- $myclass2->MyPublic(); // Fonctionne
- $myclass2->Foo2(); // Public et Protected fonctionnent, non pas Private
- class Bar
- {
- public function test() {
- $this->testPrivate();
- $this->testPublic();
- }
- public function testPublic() {
- echo "Bar::testPublic\n";
- }
- private function testPrivate() {
- echo "Bar::testPrivate\n";
- }
- }
- class Foo extends Bar
- {
- public function testPublic() {
- echo "Foo::testPublic\n";
- }
- private function testPrivate() {
- echo "Foo::testPrivate\n";
- }
- }
- $myFoo = new foo();
- $myFoo->test(); // Bar::testPrivate
- // Foo::testPublic
- ?>
Remonter 
