Modificatori de acces în PHP
Un modificator de acces (numit și cuvânt cheie de vizibilitate) stabilește de unde poate fi folosită o proprietate sau o metodă.
PHP oferă trei astfel de modificatori:
public- disponibil de oriunde; aceasta este valoarea implicităprotected- disponibil în interiorul clasei și în clasele derivate din eaprivate- disponibil DOAR în interiorul clasei care îl definește
Notă: Dacă omiți modificatorul, PHP tratează proprietatea sau metoda ca fiind public.
Modificatorul de acces public
Dacă marchezi o proprietate sau o metodă ca public, orice cod poate ajunge la ea, din interiorul sau din exteriorul clasei.
În exemplul următor, codul din afara clasei poate folosi atât proprietatea $name, cât și metoda get_details().
Exemplu public
Codul din afara clasei setează o proprietate publică și apelează o metodă publică:
Ieșire: script PHP
<?php
class Fruit {
public $name;
public function get_details() {
echo "Nume: " . $this->name . ".";
}
}
$apple = new Fruit();
$apple->name = "Apple"; // Poate fi accesată direct
$apple->get_details();
?>
Modificatorul de acces private
private este cel mai strict modificator: doar codul din interiorul clasei care definește proprietatea sau metoda poate ajunge la ea.
În exemplul următor, $name este privată, așa că accesarea ei directă din afara clasei eșuează.
Exemplu private
Atribuirea unei valori unei proprietăți private din afara clasei provoacă o eroare fatală:
Ieșire: script PHP
<?php
class Fruit {
private $name;
public function get_details() {
echo "Nume: " . $this->name . ".";
}
}
$apple = new Fruit();
$apple->name = "Apple"; // Eroare: nu se poate accesa proprietatea privată
$apple->get_details();
?>
Modificatorul de acces protected
protected se află la mijloc: clasa însăși și clasele derivate din ea (clasele copil) au acces, dar codul din exterior nu are.
În exemplul următor, $name este protejată, așa că accesul direct din exterior nu este permis.
Exemplu protected
Atribuirea unei valori unei proprietăți protejate din afara clasei provoacă o eroare fatală:
Ieșire: script PHP
<?php
class Fruit {
protected $name;
public function get_details() {
echo "Nume: " . $this->name . ".";
}
}
$apple = new Fruit();
$apple->name = "Apple"; // Eroare: nu se poate accesa proprietatea protejată
$apple->get_details();
?>
protected cu moștenire
O clasă copil are voie să citească o proprietate protejată pe care a moștenit-o:
Ieșire: script PHP
<?php
class Fruit {
protected $name;
public function setType($name) {
$this->name = $name;
}
}
class Apple extends Fruit {
public function getType() {
echo "Nume: " . $this->name . ".";
}
}
$apple = new Apple();
$apple->setType("Apple");
echo $apple->getType();
?>