Manuel PHP
Précédent | Chapitre 19. Les classes et les objets (PHP 5) | Suivant

# 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
?>`

Précédent | Sommaire | Suivant
Constructeurs et destructeurs | Niveau supérieur | L'opérateur de résolution de portée (::)