Sobes.tech
Junior

Wat zijn zichtbaarheid modificatoren in PHP?

sobes.tech AI

Antwoord van AI

Toegankelijkheidsmodifiers (public, protected, private) bepalen het toegangsniveau tot de eigenschappen en methoden van een klasse.

  • public - toegankelijk vanaf elke plek (binnen de klasse, in afgeleide klassen, van buitenaf).
  • protected - toegankelijk binnen de klasse en in de afgeleide klassen.
  • private - alleen toegankelijk binnen de klasse waarin het is gedeclareerd.

Voorbeeld:

<?php

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

    public function publicMethod() {
        echo "Toegang tot publieke methode: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Toegang tot beschermde methode: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Toegang tot private methode: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Toegang in kindklasse: " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // Toegang tot public en protected
        // echo $this->privateProperty; // Fout, private niet toegankelijk
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Fout, private niet toegankelijk
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Beschikbaar
// echo $obj->protectedProperty; // Fout, protected niet toegankelijk van buiten
// echo $obj->privateProperty; // Fout, private niet toegankelijk van buiten
$obj->publicMethod();
// $obj->protectedMethod(); // Fout, protected niet toegankelijk van buiten
// $obj->privateMethod(); // Fout, private niet toegankelijk van buiten

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