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 19.10. 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.

Exemple 19.11. 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
?>