PHPda overloading xususiyatlari

PHPda overloading xususiyatlari

PHPda overloading xususiyatlari

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’zi 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.

Bu izohlarni aniqroq tushuntiramiz.

__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

__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 "
"; var_dump(isset($test->a)); // $test obyektida a nomli xususiyat borligini tekshirish. echo "
"; unset($test->a); // $test obyektida a nomli xususiyatni o'chirish var_dump(isset($test->a));

Natija:

phpda overloading

Manba:

Framework va CMS
PHPda overloading xususiyatlari