Sobes.tech
Junior

Mi a láthatósági módosítók a PHP-ben?

sobes.tech MI

Válasz az MI-től

Láthatósági módosítók (public, protected, private) határozzák meg egy osztály tulajdonságainak és metódusainak hozzáférési szintjét.

  • public - bárhonnan elérhető (az osztályon belül, öröklődő osztályokban, kívülről).
  • protected - az osztályon belül és az öröklődő osztályokban elérhető.
  • private - csak az adott osztályon belül elérhető, ahol deklarálva van.

Példa:

<?php

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

    public function publicMethod() {
        echo "Hozzáférés a nyilvános metódushoz: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Hozzáférés a védett metódushoz: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Hozzáférés a privát metódushoz: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Hozzáférés a gyermek osztályban: " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // hozzáférés a public és protected-hez
        // echo $this->privateProperty; // Hiba, a private nem elérhető
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Hiba, a private nem elérhető
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Elérhető
// echo $obj->protectedProperty; // Hiba, a protected nem elérhető kívülről
// echo $obj->privateProperty; // Hiba, a private nem elérhető kívülről
$obj->publicMethod();
// $obj->protectedMethod(); // Hiba, a protected nem elérhető kívülről
// $obj->privateMethod(); // Hiba, a private nem elérhető kívülről

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