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