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:
Manba:
Framework va CMS
PHPda overloading xususiyatlari