Sobes.tech
Junior

Ce sunt modificatorii de vizibilitate în PHP?

sobes.tech AI

Răspuns de la AI

Modificatorii de vizibilitate (public, protected, private) determină nivelul de acces la proprietățile și metodele unei clase.

  • public - accesibil de oriunde (în interiorul clasei, în clasele moștenitoare, din exterior).
  • protected - accesibil în interiorul clasei și în clasele moștenitoare.
  • private - accesibil doar în interiorul clasei în care este declarat.

Exemplu:

<?php

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

    public function publicMethod() {
        echo "Acces la metodă publică: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Acces la metodă protejată: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Acces la metodă privată: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Acces în clasa fiică: " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // Acces la public și protected
        // echo $this->privateProperty; // Eroare, private inaccesibil
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Eroare, private inaccesibil
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Disponibil
// echo $obj->protectedProperty; // Eroare, protected inaccesibil din exterior
// echo $obj->privateProperty; // Eroare, private inaccesibil din exterior
$obj->publicMethod();
// $obj->protectedMethod(); // Eroare, protected inaccesibil din exterior
// $obj->privateMethod(); // Eroare, private inaccesibil din exterior

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