PHP: i modificatori private e protected delle classi

PHP: i modificatori private e protected delle classi

In PHP i modificatori di visibilità private e protected vengono usati nelle classi per controllare l'accesso alle proprietà e ai metodi di una classe.

private ha lo scopo di nascondere completamente una proprietà o un metodo impedendone l'accesso dall'esterno della classe, sia che si tratti di un accesso diretto tramite l'istanza della classe sia che tale accesso avvenga indirettamente tramite l'ereditarietà, ossia all'interno di una classe discendente.

protected ha lo scopo di nascondere parzialmente una proprietà o un metodo impedendone l'accesso diretto dall'esterno della classe tramite istanziazione ma consentendone l'accesso tramite l'ereditarietà, ossia all'interno di una classe discendente.

Nel seguente esempio osserviamo il comportamento del primo modificatore.

class A {
    private $property;
    public function __construct($value) {
        $this->property = $value;
    }    
}


$a = new A('Test');
echo $a->property; // Errore


class B extends A {
    public function __construct($value) {
        parent::__construct($value);
    }
    public function displayProperty() {
        echo $this->property;
    }
}

$b = new B('Test');
$b->displayProperty(); // Errore

Nel seguente esempio osserviamo invece il comportamento del secondo modificatore.

class A {
    protected $property;
    public function __construct($value) {
        $this->property = $value;
    }    
}


$a = new A('Test');
echo $a->property; // Errore


class B extends A {
    public function __construct($value) {
        parent::__construct($value);
    }
    public function displayProperty() {
        echo $this->property;
    }
}

$b = new B('Test');
$b->displayProperty(); // 'Test'

Qual'è il criterio di scelta tra l'uno e l'altro? private andrebbe usato quando la proprietà o il metodo sono unici per la classe in cui vengono definiti, ossia rappresentano valori o comportamenti che non possono essere riutilizzati altrove perché la loro funzione si esaurisce unicamente all'interno della classe.

protected, al contrario, indica la possibilità di riutilizzo della proprietà e del metodo in altre classi derivate tramite il meccanismo dell'ereditarietà. Entrambi i modificatori hanno in comune il fatto di bloccare completamente l'accesso tramite l'istanza della classe in questione.

Si possono tuttavia creare metodi di tipo public per reperire (getters) o impostare (setters) le proprietà definite con questi modificatori.

Torna su