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