Funksiyalar — e'lon qilish, parametr, return, default qiymat
Muammodan boshlaylik
Saytda narx 15 joyda chiqariladi. Har safar shunday yozasiz:
<?php
echo number_format($narx, 0, '', ' ') . " so'm";
Bir kuni buyurtmachi: "Narxlar so'm emas, UZS bilan chiqsin". Endi 15 ta faylni qidirasiz. Bittasini unutsangiz — saytda ikki xil format.
Yechim: bu kodni bir marta yozib, nom berish va kerakli joyda shu nom bilan chaqirish. Bu — funksiya.
Funksiya nima?
Funksiya — nom berilgan kod bo'lagi. Uni bir marta yozasiz, ko'p marta ishlatasiz.
Hayotiy o'xshatma: qahva mashinasi. Ichiga qahva doni va suv solasiz (parametrlar), tugmani bosasiz (chaqirish), tayyor qahva chiqadi (natija). Ichida nima bo'layotganini har safar o'ylashingiz shart emas.
<?php
function narxFormat($narx)
{
return number_format($narx, 0, '', ' ') . " so'm";
}
echo narxFormat(249000); // 249 000 so'm
echo narxFormat(3200000); // 3 200 000 so'm
Endi formatni o'zgartirish kerak bo'lsa — faqat bitta joyni o'zgartirasiz.
Tuzilishi
<?php
function salomlash($ism) // function — kalit so'z, salomlash — nom, $ism — parametr
{
return "Salom, $ism!"; // return — natijani qaytarish
}
$xabar = salomlash("Lola"); // chaqirish, "Lola" — argument
echo $xabar; // Salom, Lola!
- Parametr — funksiya e'lonidagi o'zgaruvchi (
$ism) - Argument — chaqirishda beriladigan haqiqiy qiymat (
"Lola")
Nomlash: funksiya nomi odatda camelCase va fe'l bilan boshlanadi — u nimadir qiladi: hisoblash(), foydalanuvchiniTop(), emailYubor().
Uslub (PSR-12): funksiya ochuvchi { alohida qatorda. if, for larda esa — bir qatorda. Bu standart, majburiy emas, lekin PHP jamiyatida shunday.
return — natija qaytarish
return ikki ish qiladi:
- Qiymatni chaqirgan joyga qaytaradi
- Funksiyani darhol to'xtatadi — keyingi qatorlar bajarilmaydi
<?php
function yoshToifasi($yosh)
{
if ($yosh < 0) {
return "Noto'g'ri yosh";
}
if ($yosh < 18) {
return "Voyaga yetmagan";
}
return "Katta";
}
echo yoshToifasi(25); // Katta
Bu "erta qaytish" (early return) usuli — ichma-ich if/else dan ancha o'qishli.
echo va return farqi
Yangi boshlovchilar eng ko'p adashadigan joy:
<?php
function a($x) { echo $x * 2; } // ekranga chiqaradi, hech narsa qaytarmaydi
function b($x) { return $x * 2; } // qaytaradi, ekranga chiqarmaydi
$natija1 = a(5); // ekranda: 10, lekin $natija1 = null
$natija2 = b(5); // ekranda: hech narsa, $natija2 = 10
echo $natija2 + 1; // 11
Qoida: funksiya odatda return qilsin. Natijani nima qilish (chiqarish, saqlash, yana hisoblash) — chaqiruvchining ishi. Shunda funksiyani istalgan joyda qayta ishlatish mumkin.
return yozilmagan funksiya null qaytaradi.
Bir nechta parametr
<?php
function chegirmaliNarx($narx, $foiz)
{
return $narx - ($narx * $foiz / 100);
}
echo chegirmaliNarx(200000, 15); // 170000
Argumentlar tartib bo'yicha parametrlarga tushadi. chegirmaliNarx(15, 200000) yozsangiz — mantiqan noto'g'ri natija chiqadi, lekin xato bermaydi.
Default qiymat
Parametrga standart qiymat berish mumkin — argument berilmasa, shu ishlatiladi:
<?php
function narxFormat($narx, $valyuta = "so'm")
{
return number_format($narx, 0, '', ' ') . " $valyuta";
}
echo narxFormat(50000); // 50 000 so'm
echo narxFormat(50000, "UZS"); // 50 000 UZS
Default qiymatli parametrlar oxirida turishi kerak:
<?php
function xato($valyuta = "so'm", $narx) { }
// Deprecated: Optional parameter $valyuta declared before required parameter $narx
Nomlangan argumentlar (PHP 8+)
Ko'p parametrli funksiyada tartibni eslash qiyin. Nom bilan berish mumkin:
<?php
function xabarYubor($kimga, $matn, $muhim = false, $nusxa = null)
{
// ...
}
// Tartib bilan — $muhim nima ekanini bilish uchun funksiyaga qarash kerak
xabarYubor("ali@mail.uz", "Salom", false, "admin@mail.uz");
// Nom bilan — o'zi tushunarli, keraksizini o'tkazib yuborish mumkin
xabarYubor(kimga: "ali@mail.uz", matn: "Salom", nusxa: "admin@mail.uz");
O'rnatilgan funksiyalarda ham ishlaydi:
<?php
echo number_format(1250000, thousands_separator: ' '); // 1 250 000
Ixtiyoriy sondagi argumentlar: ...
<?php
function yigindi(...$sonlar)
{
return array_sum($sonlar);
}
echo yigindi(1, 2); // 3
echo yigindi(5, 10, 15, 20); // 50
...$sonlar — barcha argumentlarni massivga yig'adi.
Bir nechta qiymat qaytarish
return faqat bitta qiymat qaytaradi. Ko'p kerak bo'lsa — massiv qaytaring:
<?php
function minMax($sonlar)
{
return [min($sonlar), max($sonlar)];
}
[$eng_kichik, $eng_katta] = minMax([4, 9, 1, 7]);
echo "$eng_kichik — $eng_katta"; // 1 — 9
Nima uchun shunday?
Nima uchun funksiya nomlari harfga sezgir emas (NarxFormat() ham ishlaydi), o'zgaruvchilar esa sezgir?
PHP ning dastlabki versiyalarida funksiyalar C tilidagi jadvalda kichik harfga o'tkazib saqlangan. O'zgaruvchilar esa boshqa mexanizmda, harflarni saqlagan holda. Orqaga moslik uchun bu shunday qolgan. Lekin bunga tayanmang — funksiyani qanday e'lon qilgan bo'lsangiz, shunday chaqiring.
Tez-tez uchraydigan xatolar
Argument yetishmasligi:
<?php
function qosh($a, $b) { return $a + $b; }
echo qosh(5);
// ArgumentCountError: Too few arguments to function qosh(), 1 passed and exactly 2 expected
Bir xil nomli funksiyani ikki marta e'lon qilish:
<?php
function salom() {}
function salom() {}
// Fatal error: Cannot redeclare salom()
Bu ko'pincha bitta faylni ikki marta include qilganda bo'ladi — require_once ishlating (18-dars).
Funksiya ichida tashqi o'zgaruvchini ishlatish:
<?php
$valyuta = "so'm";
function narx($n)
{
return $n . " " . $valyuta; // Warning: Undefined variable $valyuta
}
Funksiya tashqaridagi o'zgaruvchilarni ko'rmaydi. Bu xato emas — ataylab shunday. 16-darsda sababini ko'ramiz. Hozircha yechim: kerakli qiymatni parametr sifatida bering.
Xulosa
Eslab qoling:
function nom($parametr) { return ...; }— e'lon qilishreturn— qiymat qaytaradi va funksiyani to'xtatadiecho≠return: funksiya odatda qaytarsin, chiqarmasin- Default qiymatli parametrlar — oxirida
nom: qiymat— nomlangan argumentlar (PHP 8+)...$args— ixtiyoriy sondagi argumentlar- Funksiya tashqi o'zgaruvchilarni ko'rmaydi — parametr orqali bering
Keyingi dars
15-dars: Tur belgilash — parametr va qaytish turlari, strict_types