Forum und email

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