August 12, 2024

PHP OOP Class va Obyektlar, Magic Methods

PHP OOP (Object Oriented Programming, Obyektga yo'naltirilgan dasturlash) da classlar va obyektlar:

class Fruit {
public $name;
public $color;

}

$apple = new Fruit();

Qanday qilib obyekt ichidagi xususiyatga qiymat berish mumkin?

2 xil usuli bor:

1. class ichida (set_name() metodi va this kalit so'zi bilan):

<?php class Fruit { public $name; function set_name($nom) { $this->name = $nom; } }

$apple = new Fruit(); $apple->set_name("Apple");

echo $apple->name; ?>

2. Obyekt tashqarisida

<?php class Fruit { public $name; } $apple = new Fruit(); $apple->name = "Apple";

echo $apple->name; ?>

PHP OOP Constructor

Konstruktor bu funksiya bo'lib class dan obyekt yaratayotganda obyekt xususiyatlarini ishga tushirishga imkon beradi.

Ya'ni class ichida konstructor funksiyasini yaratadigan bo'lsak, shu klassdan obyekt yaratayotganda PHP avtomatik ravishda shu konstruktor funksiyasini chaqiradi.

konstruktor funksiyasi sintaksisi:

__construct() {}

Konstruktor funksiyasidan foydalanish bizga obyekt xususiyatlari uchun qiymatlarni class dan obyekt yaratayotganimizda argument sifatida berib yuborish imkonini beradi.

Konstruktor funksiyasidan foydalanish bizga klass ichida yuqoridagi misolda ko'rganimiz set_name() metodini (bilamizki class va obyekt ichidagi funksiyalar metod deb ataladi) chaqirishdan ozod qiladi va buning natijasida bir necha qator kod yozishni oldini oladi.

set_name() metodidan foydalanib obyekt xusisiyati qiymatini o'zgartirish:

<?php class Fruit { public $name; function set_name($nom) { $this->name = $nom; }

}

$apple = new Fruit(); $apple->set_name("Apple");

echo $apple->name; ?>

Endi esa konstruktor funksiyasidan foydalanamiz:

<?php class Fruit { public $name; function __construct($nom) { $this->name = $nom; } }

$apple = new Fruit("Apple"); echo $apple->name; ?>

Boshqa misol:

<?php class Fruit { public $name; public $color;

function __construct($name, $color) { $this->name = $name; $this->color = $color; } function get_name() { return $this->name; } function get_color() { return $this->color; } }

$apple = new Fruit("Apple", "red"); echo $apple->get_name(); echo "<br>"; echo $apple->get_color(); ?>

PHP OOP Destructor

Destruktor ham funksiya bo'lib obyekt yo'q qilinayotganda yoki skript to'xtaganda yoki tuganda ishga tushadi.

Agar __destruct() funksiyasini yaratadigan bo'lsak PHP skript oxirida ushbu funksiyani chaqirib yuboradi.

Destrukt funksiyasi sintaksisi __destruct();

Quyidagi misolda class ob'ekt yaratganimizda avtomatik ishga tushadigan __construct() funksiyasi va skript oxirida avtomatik chaqiriladigan __destruct() funksiyasi mavjud:

<?php class Fruit { public $name; public $color;

function __construct($name) { $this->name = $name; } function __destruct() { echo "The fruit is {$this->name}."; } }

$apple = new Fruit("Apple"); ?>

Kod natijasi quyidagicha: The fruit is apple.

Bu misoldan shuni ko'rish mumkinki yangi "apple" obyektini yaratishimiz bilan avtomatik destructor funksiya chaqirilib yuborilyapti.

Boshqa miso:

<?php class Fruit { public $name; public $color;

function __construct($name, $color) { $this->name = $name; $this->color = $color; } function __destruct() { echo "The fruit is {$this->name} and the color is {$this->color}."; } }

$apple = new Fruit("Apple", "red"); ?>

Kod natijasi: The fruit is Apple and the color is red.

Konstruktorlar va destruktorlar kod miqdorini kamaytirishga yordam bergani uchun ular juda foydali!

PHP invoke()

invoke() magic metodi qachonki obyektni funksiya sifatida ishlatganda avtomatik ishga tushadi.

class Foo {

public function __invoke() {

print "Invoke ishga tushdi"

}

}

$foo = new Foo();

$foo(); // Invoke ishga tushdi.

PHP Access Modifiers — PHP Kirish modifikatorlari

Xususiyatlar va usullarda ularga qayerda kirishni nazorat qiluvchi kirish modifikatorlari bo'lishi mumkin. Ular 3 xil:

  • public - xususiyat va usulga istalgan joydan kirish mumkin. Bu default holati
  • protected - xususiyat va usulga klass ichida va shu klassdan kelib chiqqan klass ichida kirish mumkin
  • xususiyat va usullarga faqat klass ichida kirish mumkin

PHP Inheritance - Meros olish

Bu OOP ning asosiy tamoyillaridan biri bo'lib bitta klassdan boshqa klass kelib chiqqanda meros bo'lib o'tayotgan xususiyatlar tushuniladi

Farzand sinf ota sinfning barcha public va protected modifikatorli xususiyat va usullarini meros qilib olishi mumkin.

- bunda extends so'zidan foylalaniladi

masalan: class Strawberry extends