Sobes.tech
Junior

Τι είναι οι τροποποιητές ορατότητας στο PHP;

sobes.tech AI

Απάντηση από AI

Οι τροποποιητές ορατότητας (public, protected, private) καθορίζουν το επίπεδο πρόσβασης στις ιδιότητες και τις μεθόδους μιας κλάσης.

  • public - προσβάσιμο από οπουδήποτε (μέσα στην κλάση, σε κλάσεις που κληρονομούν, από έξω).
  • protected - προσβάσιμο μέσα στην κλάση και στις κλάσεις που κληρονομούν από αυτή.
  • private - προσβάσιμο μόνο μέσα στην κλάση στην οποία δηλώνεται.

Παράδειγμα:

<?php

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

    public function publicMethod() {
        echo "Πρόσβαση σε δημόσια μέθοδο: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Πρόσβαση σε προστατευμένη μέθοδο: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Πρόσβαση σε ιδιωτική μέθοδο: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Πρόσβαση στην υποκλάση: " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // Πρόσβαση σε public και protected
        // echo $this->privateProperty; // Σφάλμα, το private δεν είναι προσβάσιμο
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Σφάλμα, το private δεν είναι προσβάσιμο
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Διαθέσιμο
// echo $obj->protectedProperty; // Σφάλμα, το protected δεν είναι προσβάσιμο από έξω
// echo $obj->privateProperty; // Σφάλμα, το private δεν είναι προσβάσιμο από έξω
$obj->publicMethod();
// $obj->protectedMethod(); // Σφάλμα, το protected δεν είναι προσβάσιμο από έξω
// $obj->privateMethod(); // Σφάλμα, το private δεν είναι προσβάσιμο από έξω

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