Sobes.tech
Junior

Czym są modyfikatory widoczności w PHP?

sobes.tech AI

Odpowiedź od AI

Modyfikatory widoczności (public, protected, private) określają poziom dostępu do właściwości i metod klasy.

  • public - dostępny z dowolnego miejsca (wewnątrz klasy, w klasach dziedziczących, spoza nich).
  • protected - dostępny wewnątrz klasy i w klasach pochodnych.
  • private - dostępny tylko wewnątrz klasy, w której został zadeklarowany.

Przykład:

<?php

class MyClass {
    public $publicProperty = 'public';
    protected $protectedProperty = 'protected';
    private $privateProperty = 'private';

    public function publicMethod() {
        echo "Dostęp do metody publicznej: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Dostęp do metody chronionej: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Dostęp do metody prywatnej: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Dostęp w klasie potomnej: " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // Dostęp do public i protected
        // echo $this->privateProperty; // Błąd, prywatne niedostępne
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Błąd, prywatne niedostępne
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Dostępne
// echo $obj->protectedProperty; // Błąd, protected niedostępne z zewnątrz
// echo $obj->privateProperty; // Błąd, prywatne niedostępne z zewnątrz
$obj->publicMethod();
// $obj->protectedMethod(); // Błąd, protected niedostępne z zewnątrz
// $obj->privateMethod(); // Błąd, prywatne niedostępne z zewnątrz

$childObj = new MyChildClass();
$childObj->testAccess();