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();