PHP-da funksiyalar obyektlarni qanday qabul qilishi (qiymat bo‘yicha yoki havola bo‘yicha) dasturdagi o‘zgaruvchilar bilan ishlash uslubini belgilaydi. Obyektlar va oddiy ma'lumot turlari bilan ishlashda farqlar mavjud. Keling, obyektlar funksiyaga qanday uzatilishini qisqacha ko‘rib chiqamiz.
Obyektlarni qiymat va havola bo‘yicha uzatish
PHP-da oddiy ma'lumot turlari (masalan, integer, string, array) funksiyaga
qiymat bo‘yicha uzatiladi. Bu shuni anglatadiki, o‘zgaruvchining nusxasi funksiyaga yuboriladi, va funksiyada o‘zgarishlar asl o‘zgaruvchiga ta'sir qilmaydi. Ammo obyektlar bilan ishlaganda bu jarayon boshqacha ishlaydi. PHP 5-dan boshlab obyektlar
havola bo‘yicha uzatiladi, bu esa obyektga to‘g‘ridan-to‘g‘ri kirish imkonini beradi.
Obyektlarni havola bo‘yicha uzatish
Obyektlar PHP-da funksiyaga havola bo‘yicha uzatiladi. Bu shuni anglatadiki, funksiya obyektning manziliga murojaat qiladi va o‘zgarishlar to‘g‘ridan-to‘g‘ri asl obyektga ta'sir qiladi. Masalan, funksiyada obyektning biror xususiyati o‘zgartirilsa, bu o‘zgarish asl obyektga ham ta'sir qiladi.
class Product {
public $price = 100;
}
function changePrice($item) {
$item->price = 200;
}
$product = new Product();
changePrice($product);
echo $product->price; // Result: 200
Bu yerda $product obyektini funksiyaga uzatganda, obyektning manzili uzatiladi. Shuning uchun funksiya ichida xususiyat o‘zgarishi asl obyektga ta’sir ko‘rsatadi.
Obyektlarni klonlash va nusxa qilib uzatish
Ba’zi hollarda obyektning asl qiymatini saqlab qolish kerak bo‘ladi. Bunday hollarda obyektni funksiyaga yuborishdan oldin klonlash orqali nusxa yaratish mumkin. Buning uchun clone operatoridan foydalaniladi.
class Product {
public $price = 100;
}
function changePrice($item) {
$item->price = 200;
}
$product = new Product();
$clonedProduct = clone $product;
changePrice($clonedProduct);
echo $product->price; // Result: 100
echo $clonedProduct->price; // Result: 200
Bu misolda $clonedProduct obyektning nusxasi sifatida yaratiladi va funksiya bu nusxani o‘zgartirsa ham, asl $product obyektining qiymati saqlanib qoladi.
Qiymat va havola bo‘yicha uzatish o‘rtasidagi farq
-
Qiymat bo‘yicha uzatishda obyektning nusxasi uzatiladi, bu esa asl obyektga ta’sir qilmaydi.
-
Havola bo‘yicha uzatishda esa obyektning manzili uzatiladi va funksiyadagi o‘zgarishlar obyektning asl qiymatiga ta’sir ko‘rsatadi.
Xulosa
PHP-da obyektlar avtomatik ravishda
havola bo‘yicha uzatiladi, ya'ni funksiyalar obyektning asl qiymatini o‘zgartirishi mumkin. Agar funksiyaga uzatilgan obyektning asl qiymati o‘zgarishini istamasangiz, uni clone yordamida nusxalash mumkin. Bu tushunchalar kodni optimallashtirishda va obyektlar bilan ishlashda muhim rol o‘ynaydi, shuningdek, PHP dasturlarini to‘g‘ri tushunib yozishga yordam beradi.
@uzdevid