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