PHP da OOP da obyektlarni havola orqali uzatish
Faraz qilaylik, bizda quyidagi User klassi mavjud:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Faraz qilaylik, biz ushbu klassning obyektini yaratamiz:
<?php
$user = new User('john', 30);
?>
Endi quyidagi vaziyatni tasavvur qiling: siz
$user o'zgaruvchisining qiymatini
boshqa bir o'zgaruvchiga, masalan
$test ga tayinlamoqchisiz.
Agar gap obyektlar haqida emas, balki primitivlar
haqida bo'lsa, ya'ni satrlar, raqamlar, massivlar va h.k.
bo'lsa, $test o'zgaruvchisiga
$user o'zgaruvchisining qiymati nusxasi
o'tadi.
Bu shuni anglatadiki, keyinchalik har qanday o'zgaruvchining o'zgartirilishi boshqa o'zgaruvchining qiymatini o'zgartirmaydi. Keling, misolni ko'rib chiqaylik:
<?php
$user = 1;
$test = $user; // $test o'zgaruvchida endi 1
$test = 2; // $test o'zgaruvchida endi 2, $user da esa hali ham 1
?>
Obyektlar bilan hamma narsa boshqacha - ular boshqa o'zgaruvchiga yozilganda nusxalanmaydi, balki havola orqali uzatiladi: bu shuni anglatadiki, bu ikkala o'zgaruvchining qiymati bir xil obyektga ega. Buning muhim oqibati bor: agar obyektning ba'zi xususiyatlarini bitta o'zgaruvchi yordamida o'zgartirsangiz, ikkinchi o'zgaruvchida ham xuddi shu o'zgarishlar paydo bo'ladi.
Keling, amalda ko'rib chiqaylik. Foydalanuvchi bilan obyekt yaratamiz:
<?php
$user = new User('john', 30);
?>
Obyektni boshqa o'zgaruvchiga tayinlaymiz:
<?php
$test = $user;
?>
name xususiyatini
$test o'zgaruvchida o'zgartiramiz
<?php
$test->name = 'eric';
?>
Keling, umumiy obyekt o'zgarganligini tekshiramiz.
name xususiyatini
$user o'zgaruvchidan chiqaramiz:
<?php
echo $user->name; // 'eric' chiqadi!
?>
Product klassini yarating, unda
quyidagi xususiyatlar bo'lsin: name,
price.
Product klassining obyektini yarating,
uni $product1 o'zgaruvchisiga yozing.
$product1 o'zgaruvchisining qiymatini
$product2 o'zgaruvchisiga tayinlang.
Ikkala o'zgaruvchi ham bir xil obyektga ishora
qilishini tekshiring.