PHPda overloading xususiyatlari

8lUfNgE2ZXI7HhMfJyys_26.png

PHPda overloading dinamik holda xususiyat va metodlarni “yaratish”ni anglatadi. Bu xususiyat va metodlar magic metodalar yordamida ishlatiladi. Overloading metodlar obyektda mavjud bo’lmagan yoki klass sohasidan tashqarida ko’rinmaydigan(ya’ni klass ichida private bilan e’lon qilingan) xususiyat va metodlar bilan ishlaganda avtomatik ishga tushadi. Barcha overloading metodlar public sifatida e’lon qilinishi kerak

PHP qo’llanma bo’yicha ba’iz overloading xususiyatlarining izohi

public __set ( string $name , mixed $value ) : void

public __get ( string $name ) : mixed

public __isset ( string $name ) : bool

public __unset ( string $name ) : void

__set() tashqaridan murojaat qilishga ruxsat etilmagan xususiyatlarga ma’lumot yozishda ishlatiladi

__get() tashqaridan murojaat qilishga ruxsat etilmagan xususiyatlardan ma’lumot olishda ishlatiladi

__isset() tashqaridan murojaat qilishga ruxsat etilmagan xususiyatlar ustida isset() va empty() funksiyalari ishlatilganda ishga tushadi

__unset() tashqaridan murojaat qilishga ruxsat etilmagan xususiyatlar ustida unset() funksiyasi ishlatilsa ishga tushadi.

 

$name argumenti – bu obyektning ishlatilayotgan xususiyati nomi. __set metodidagi $value argumenti $name xususiyatiga o’rnatilishi kerak bo’lgan qiymat.

Overloading xususiyati faqat obyekt kontekstidagina ishlaydi. Bu “sehrli”(magic) metodlar static kontekstda ishga tushmaydi. Shu sababli bu metodlar static sifatida e’lon qilinmaydi.

Ushbu xususiyatlarni aniqroq tushuntiramiz va misollar bilan ko'rib chiqamiz.

__set magic metodi orqali klassdagi xususiyatga qiymat o’rnatish mumkin. Bu holatda xususiyat private qilib e’lon qilingan bo’lishi kerak bo’ladi.

Masalan:

class Test {

private $data = array(); // barcha “mavhum” xususiyatlarni o’zida saqlovchi xususiyat

          public function __set($name, $value)

          {

     $this->data[$name] = $value;

         }

}

$test = new Test();

$test->a = 25; // $test obyektiga a “mahum” xususiyatini beradi va unga 25 qiymatini o’zlashtiradi

__get() magic metodi bilan __set() orqali o’rnatilgan xususiyatlarni(bu yerda mavhum xususiyat desa ham bo’ladi) shu klassdan yaratilgan obyektning xususiyati kabi olib beradi

Masalan(yuqorida berilgan misolni davom ettiramiz):

class Test {

     private $data = array();

    public function __set($name, $value)

    {

       $this->data[$name] = $value;
    } 
     public function __get($name){
       if(array_key_exists($name, $this->data))
           return $this->data[$name];
       return null;
    }
}
$test = new Test(); $test->a = 25; // $test obyektiga a “mavhum” xususiyatini beradi va unga 25 qiymatini o’zlashtiradi 
echo $test->a; // a xususiyat qiymatini olish. Bu xususiyatni __get() metodi olib beradi

 

__isset() magic metodi esa isset() funksiyasi bilan obyektning xususiyati mavjudligini tekshirganda avtomatik ishga tushadi.

Masalan:

class Test {

   private $data = array();

   public function __set($name, $value)

   {

      $this->data[$name] = $value;

   }
   public function __isset($name){
       return isset($this->data[$name]);

   }
}

$test = new Test();
$test->a = 25; // $test obyektiga a “mavhum” xususiyatini beradi va unga 25 qiymatini o’zlashtiradi
isset($test->a); // $test obyektida a nomli xususiyat borligini tekshirish. Natija: true

__unset() magic metodi obyektning berilgan “mavhum” xususiyatini o’chirish uchun unset() funksiyasidan foydalanganda avtomatik ishga tushadi.

Masalan:

class Test {

   private $data = array();

   public function __set($name, $value)

   {
      $this->data[$name] = $value;
   }

   public function __unset($name){

      unset($this->data[$name]);
   }
}

$test = new Test();

$test->a = 25; // $test obyektiga a “mavhum” xususiyatini beradi va unga 25 qiymatini o’zlashtiradi

unset($test->a); // $test obyektida a nomli xususiyatni o’chirish

Umumiy kod:

class Test {

   private $data = array();

   public function __set($name, $value)

   {

     $this->data[$name] = $value;

   } 

   public function __get($name){

      if(array_key_exists($name, $this->data))
         return $this->data[$name]; 
      return null;
   }

   public function __isset($name){

      return isset($this->data[$name]);
   }

   public function __unset($name){

      unset($this->data[$name]);
   }
}

$test = new Test();

$test->a = 25; // $test obyektiga a “mavhum” xususiyatini beradi va unga 25 qiymatini o’zlashtiradi. Bu ishni ___set() metodi bajaradi
echo $test->a; // a “mavhum” xususiyat qiymatini olish. Bu xususiyatni __get() metodi olib beradi
echo "<br>";
var_dump(isset($test->a)); // $test obyektida a nomli xususiyat borligini tekshirish.
echo "<br>";
unset($test->a); // $test obyektida a nomli xususiyatni o’chirish
var_dump(isset($test->a));

 

Natija:

P.S. Maqolada faqat to'rtta overloading xususiyatlari keltirib o'tildi. Qolgan xususiyatlar keyinroq ko'rib chiqiladi.

Foydalanilgan manbaa: PHP rasmiy sayti