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