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->public;
        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
?>