⚔️წვდომის მოდიფიკატორები

რა არის და რისთვის გვჭირდება

წვდომის მოდიფიკატორების (access modifiers) საშუალებით შეგვიძლია განვსაზღვროთ გვინდა თუ არა ჩვენი კლასის თვისებების წაკითხვა და ჩაწერა შესაძლებელი იყოს ობიექტის გარედან. არსებობს 3 წვდომის მოდიფიკატორი, ესენია: public, private და protected.

  • public - მოდიფიკატორით თვისებაზე წვდომა გვაქვს ობიექტის შიგნითაც და გარეთაც.

  • private - მოდიფიკატორით თვისებაზე წვდომა მხოლოდ ობიექტის შიგნით გვაქვს

  • protected - მოდიფიკატორში კი მხოლოდ შიგნით და მემკვიდრე კლასის ობიექტებში. (მემკვიდრეობითობა განხილული იქნება ცოტა მოგვიანებით)

მოდიფიკატორების კარგად გასააზრებლად ყურადღებით გაეცანი შემდეგ მაგალითებს.

<?php

class Human
{
    public string $name;
    public string $lastName;
    
    function __construct(string $name, string $lastName){
        $this->name = $name;
        $this->lastName= $lastName;
    }
    
    public function print(){
        // ობიექტს შიგნით / კლასში
        echo "$this->name - $this->lastName \n";
    }
}



$john= new Human('Tonny','Stark');
$john->print(); // Tonny- Stark

// ობიექტს გარეთ
$john->lastName = 'Lanister';
$john->print(); // Tonny - Lanister

🛠️ Getters & Setters

წვდომის მოდიფიკატორები გვეხმარება რომ დავიცვათ ინფორმაციის მთლიანობა, რომ ინფორმაცია არ იცვლებოდეს არასასრუველი ადგილიდან, და თავი დავიზღვიოთ ადამიანური მექანიკური შეცდომებისაგან. ამ ყველაფერ დადებითობასთან ერთად გასათვალისწინებელია ესეთი შემთხვევაც. რა უნდა ვქნათ როცა გვაწყობს რომ თვისება იყოს private მაგრამ მაინც გვინდა მისი მნიშვნელობის წაკითხვა ან შეცვლა ობიექტის გარედან? სწორედ აქ გვევლინებიან გმირებად გეთერები და სეთერები. ისინი წარმოადგენენ ჩვენს მიერ დაწერილ მეთოდებს რომელთა გამოძახებითაც შესაძლებელია ობიექტის გარედან ინფორმაციის წაკითხვა და ჩაწერა. მომდევნო კოდში შეგიძლია გადახედო ერთ-ერთ მაგალითს.

<?php

class Human
{
    private string $name;
    private string $lastName;
    
    public function __construct(string $name, string $lastName){
        $this->name = $name;
        $this->lastName= $lastName;
    }
 
     // Getters
     public function getName(){
         return $this->name;
     }
      public function getLastName(){
         return $this->lastName;
     }
     
     // Setters
      public function setName(string $value){
         $this->name = $value;
     }
      public function setLastName(string $value){
         $this->lastName= $value;
     }
}

$spiderMan= new Human('Peter','Parker');

// Retrive data with Getter
echo $spiderMan->getName() . ' ' . $spiderMan->getLastName() . "\n"; 
// Output: Peter Parker

// This would be an error since name & lastName are private
// echo "$spiderMan->name $spiderMan->lastName \n"; 

// Set Data with Setter
$spiderMan->setName('Tom');
$spiderMan->setLastName('Holland');

// print changed attribute values
echo $spiderMan->getName() . ' ' . $spiderMan->getLastName() . "\n";
// Output: Tom Holland

Last updated