Les classes et les objets (PHP 5)
PHP Manual

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.

Exemple #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 
$obj2->public// Fonctionne
echo $obj2->private// Indéfini
echo $obj2->protected// Erreur fatale
$obj2->printHello(); // Affiche Public, Protected2 et Indéfini

?>

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.

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

<?php
/**
 * Définition de MyClass
 */
class MyClass
{
    
// Déclare un contructeur public
    
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
?>


Les classes et les objets (PHP 5)
PHP Manual