PHP da kirish modifikatorlari

A

Boshqa tillar singari, PHP ham sinfning usullari yoki atributlari uchun ma'lum imkoniyatlarni amalga oshiradi. Kirish modifikatorlari sinf o'zgaruvchilari yoki usullariga qayerdan kirish mumkinligini belgilaydi. Ushbu maqolada siz bu haqda bilib olasiz PHP da kirish modifikatorlari OOP va ularning turlari.

PHP da kirish modifikatorlarining turlari

PHP da uchta kirish modifikatori mavjud.

Ommaviy - PHP sinfida usul yoki atribut yaratganingizda va kirish modifikatorini ko'rsatmasangiz, u sukut bo'yicha ommaviy qilib o'rnatiladi. Ushbu rejimda usul yoki atribut hamma joyda mavjud.

Xususiy - Shaxsiy kirish modifikatori bilan usul yoki o'zgaruvchi yaratganingizda, unga faqat u yaratilgan sinf ichida kirish mumkin.

Himoyalangan - Himoyalangan usul yoki atribut yaratilgan sinf ichida foydalanish mumkin. Bundan tashqari, ushbu sinfdan olingan sinflar uning himoyalangan usuli va atributi bo'lishi mumkin.

misol

<?php
class Person{
  public $name;
  protected $age;
  private $height;
}

$x= new Person();
$x->name = 'Jawad'; // OK
$x->age= '32'; // ERROR
$x->height= '5.4'; // ERROR
?>

Yuqoridagi misolni tushuntirish

  • Yuqoridagi misolda biz uch xil turdagi kirish modifikatorlari bilan uch turdagi atributlarga ega Person sinfini yaratamiz.
  • Name atributi ommaviy qilib o'rnatiladi. Holbuki, yosh va bo'y mos ravishda himoyalangan va shaxsiy qilib o'rnatiladi.
  • Biz sinfdan tashqari atribut nomiga kirishga va unga qandaydir qiymat belgilashga harakat qilsak, u yaxshi ishlaydi.
  • Ammo, biz sinfdan tashqarida yosh va bo'y atributlariga qiymat berishga harakat qilsak, bu halokatli xatolikka olib keladi.

Shunday qilib, yuqoridagi misoldan siz PHP da kirish modifikatorlari haqida aniq tushunchaga egasiz. Keling, usullarni mashq qilaylik.

PHPda umumiy, xususiy va himoyalangan usullar

<?php
class Person{
  public $name;
  public $age;
  public $height;

  function set_name($n) {  // a public function (default)
    $this->name = $n;
  }
  protected function set_age($a) { // a protected function
    $this->age = $a;
  }
  private function set_height($h) { // a private function
    $this->height = $h;
  }
}

$person = new Person();
$person->set_name('Jawad'); // OK
$person->set_age('26'); // ERROR
$person->set_height('5.4'); // ERROR
?>

Yuqoridagi misolni tushuntirish

  • Yuqoridagi misolda biz uch xil turdagi kirish modifikatorlari bilan uch turdagi usullarga ega Person sinfini yaratamiz.
  • Nom usuli hamma uchun o'rnatiladi. Holbuki, yosh va bo'y mos ravishda himoyalangan va shaxsiy qilib o'rnatiladi.
  • Biz sinfdan tashqari usul nomiga kirishga va unga qandaydir qiymat belgilashga harakat qilsak, u yaxshi ishlaydi.
  • Ammo, biz sinfdan tashqari yosh va balandlik usullariga qiymat berishga harakat qilsak, bu halokatli xatolikka olib keladi.

Ushbu uchta kirish modifikatoridan tashqari, bizda PHP/da Abstract va Yakuniy kirish modifikatorlari mavjud. Men keyingi bo'limda siz ularni misollar bilan o'rganasiz.

PHP da abstrakt kirish modifikatori

Mavhum kirish modifikatori faqat sinf va usullarga qo'llanilishi mumkin. Biz sinf atributlari bilan abstraktlardan foydalana olmaymiz.

Sinf bilan abstrakt ishlatganimizdan so'ng, uning ob'ektini ishga tushirib bo'lmaydi, chunki unda konstruktor yo'q.

Bundan tashqari, agar siz sinf bilan mavhum kirish modifikatoridan foydalanmasangiz va uning ichida qandaydir mavhum usulni e'lon qilmasangiz, unutmang. Sinf bir butun sifatida mavhum bo'lib qoladi.

Misol uchun

<?php

abstract class Bike {

    private $maxSpeed = 80;

    // Simple method
    public function drivingSpeed() {
        return "Driving at " . $this->maxSpeed . " kilometer/hour";
    }

    // Abstract method
    abstract public function drive();
}

class Police extends Bike {

    public function drive() {
        return "Driving out of speed limit.";
    }

}

$bike= new Police();
echo $bike->drivingSpeed();

?>
  • Yuqoridagi misolda biz mavhum usul drive()ni o'z ichiga olgan Bike mavhum sinfini yaratamiz.
  • Biz mavhum usul drayverini amalga oshirishni ta'minlaydigan boshqa sinf yaratamiz.
  • Biz mavhum sinf ob'ektini yarata olmaganimiz uchun Police sinfidan foydalanamiz.

PHP da oxirgi kirish modifikatori

Xuddi mavhum kirish modifikatori kabi biz PHP da sinf atributlari bilan yakuniy kirish modifikatoridan foydalana olmaymiz. Biz sinfni yoki uning usullarini yakuniy qilishimiz mumkin.

Yakuniy kalit so'zga ega bo'lgan sinf boshqa sinflar tomonidan meros qilib olinmaydi. Bundan tashqari, oxirgi kirish modifikatoriga ega usulni ushbu sinfdan olingan kichik sinflar tomonidan bekor qilib bo'lmaydi.

Masalan - PHP-dagi yakuniy sinf

<?php

final class ParentClass {

    final function msg1() {
        echo "Method 1 of final class";
    }

    function msg2() {
        echo "Method 2 of final class";
    }
}

$obj1 = new ParentClass();
$obj1->msg1();
$obj1->msg2();

?>
  • Yuqoridagi sinfda biz msg1() yakuniy usuli va msg2() oddiy usulini yaratamiz.
  • Biz msg1() yakuniy usulini bekor qila olmaymiz. Biroq, msg2() usullari uni meros qilib olgan sinf tomonidan bekor qilinishi mumkin.
  • Ota-ona sinfini kengaytiruvchi sinf yaratish orqali ushbu muammoni mashq qilishga harakat qiling. Ikkala usulni ham qo'llang va qaysi usul bekor qilinganda xatolikka olib kelishini tekshiring.

Yana bir misol - PHP da yakuniy usul

<?php

class ParentClass {

    final function msg1() {
        echo "Final Method 1 of simple class";
    }

    function msg2() {
        echo "Simple method 2 of simple class";
    }
}

class ChildClass extends ParentClass {

    function msg1() {
        echo "Trying final method to override.";
    }

}

?>
  • Yuqoridagi misolda biz ikkita usulga ega yakuniy bo'lmagan yoki oddiy sinf yaratamiz. msg1() oxirgi usul va msg2() oddiy.
  • Biz Ota-sinfni kengaytiruvchi Child Class yaratamiz va ota-sinfning msg1() yakuniy usulini bekor qilishga harakat qilamiz.
  • Bu halokatli xatoga olib keladi va siz ota-ona sinfining yakuniy usulini bekor qila olmaysiz.

Fikr qo'shish

Repetitor tarmog'i

PHP tilini A dan Z gacha o'rganing