Cześć,
uczę się PHP i mam pewną niejasną sytuację odnośnie modyfikatorów dostępu. Otóż mam taki oto kod:
<!doctype html>
<html>
<head>
</head>
<body>
<?php
/*
Modyfikator dostępu musi wystapić przed każdym polem w klasie, nie musi być użyty natomiast przed każdą metodą.
Gdy nie ma modyfikatora dostępu przed metodą, oznacza to że jest ona publiczna (czyli tak samo jakby użyto
modyfikatora public). Znaczenie modyfikatorów:
- public: oznacza, że pole/metoda jest publiczne, czyli dostępne w pozostałych klasach
- protected: oznacza, że pole/metoda jest chronione, czyli dostępne jest w zakresie tylko swojej klasy oraz klas
bazowych/pochodnych
- private: oznacza, że pole/metoda jest dostępne tylko w obrębie klasy, w której jest zdefiniowane
*/
class A
{
public $zmienna1 = 10;
protected $zmienna2 = 20;
private $zmienna3 = 30;
public function wyswietl()
{
echo("Klasa A->Zmienna 1 (public): $this->zmienna1.<br>");
echo("Klasa A->Zmienna 2 (protected): $this->zmienna2.<br>");
echo("Klasa A->Zmienna 3 (private): $this->zmienna3.<br>");
}
}
class B extends A
{
public function wyswietl()
{
echo("Klasa B->Zmienna 1 (public): $this->zmienna1.<br>");
echo("Klasa B->Zmienna 2 (protected): $this->zmienna2.<br>");
echo("Klasa B->Zmienna 3 (private): $this->zmienna3.<br>");
}
}
$objA = new A();
$objB = new B();
echo("Zawartość obiektu \$objA: <br>");
echo($objA->zmienna1."<br>");
echo($objA->zmienna2."<br>");
echo($objA->zmienna3."<br>");
$objA->wyswietl();
echo("<br>Zawartosc obiektu \$objB: <br>");
$objB->wyswietl();
?>
</body>
</html>
Wynikiem działania tego kodu jest:
Zawartość obiektu $objA:
10
Dlaczego:
- nie działa kod z linijki 26, 27 i 48 skoro zgodnie z definicją modyfikator
protected
orazprivate
został użyty w klasie bazowej - nie działa kod z linijki 45 i 46, skoro klasa potomna zgodnie z definicją ma dostęp do pól
public
iprotected
klasy bazowej?
Pozdrawiam!