Vizibilitatea
Vizibilitatea unei propietăţi sau a unei metode poate fi definită prefixând declaraţia cu una din cuvintele cheie: public, protected sau private. Elementele (fie ele propietăţi sau metode) declarate public pot fi accesate oriunde. Elementele declarate protected limitează accesul la clasele care moştenesc propietăţile sau metodele (precum şi la clasa care le defineşte). În final, cele declarate private limitează vizibilitatea doar la clasa în care sunt definite.
Vizibilitatea membrilor
Membri unei clase trebuie definiţi cu: public, private, sau protected.
Example#1 Declaraţie membri
<?php
/**
* Definire ClassaMea
*/
class ClassaMea
{
public $membru_public = 'Eu sunt: Public';
protected $membru_protected = 'Eu sunt: Protected';
private $membru_private = 'Eu sunt: Private';
function afiseazaBunaZiua()
{
echo $this->membru_public . ", ";
echo $this->membru_protected . ", ";
echo $this->membru_private;
}
}
$obj = new ClassaMea();
echo $obj->membru_public; // Funcţioneaza
echo $obj->membru_protected; // Eroare fatală
echo $obj->membru_private; // Eroare fatală
$obj->afiseazaBunaZiua(); // Afişează Eu sunt: Public, Eu sunt: Protected, Eu sunt: Private
/**
* Define ClassaMea2
*/
class ClassaMea2 extends ClassaMea
{
// Putem redeclara metodele publice ÅŸi protected, dar nu ÅŸi pe cele private
protected $membru_protected = 'Eu sunt: Protected2';
function afiseazaBunaZiua()
{
echo $this->membru_public . ",";
echo $this->membru_protected;
echo $this->membru_private;
}
}
$obj2 = new ClassaMea2();
echo $obj->membru_public; // Funcţionează
echo $obj2->membru_private; // Nedefinit
echo $obj2->membru_protected; // Eroare fatală
$obj2->afiseazaBunaZiua(); // Afişează Eu sunt: Public, Eu sunt: Protected2
?>
Notă: Metoda PHP 4 de a declara variabile folosind cuvântul cheie var nu mai este valabilă pentru obiectele din PHP 5. Pentru compatibilitate variabilele declarate în PHP 5 cu var vor fi automat înzestrate cu vizibilitate public, şi se va emite un warning de tip E_STRICT.
Vizibilitatea metodelor
Metodele claselor trebuie definite cu public, private, sau protected. Metodele fără nici o declaraţie sunt implicit considerate public.
Example#2 Declaraţie metode
<?php
/**
* Definire ClasaMea
*/
class ClasaMea
{
// Constructorul trebuie să fie public
public function __construct() { }
// Declararea unei metode: public
public function MyPublic() { }
// Declararea unei metode: protected
protected function MyProtected() { }
// Declararea unei metode: private
private function MyPrivate() { }
// This is public
function Foo()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); // Funcţionează
$myclass->MyProtected(); // Eroare Fatală
$myclass->MyPrivate(); // Eroare Fatală
$myclass->Foo(); // Public, Protected şi Private funcţionează
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// This is public
function Foo2()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // Eroare Fatală
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Funcţionează
$myclass2->Foo2(); // Public şi Protected funcţionează, nu şi Private
?>