PHP / Функц үндэс

Функц үндэс

Функц бол нэг даалгаврыг гүйцэтгэдэг, нэрлэгдсэн кодын блок юм. Нэг удаа бичиж, хэдэн ч удаа дуудаж болдог тул давтагдах кодоос зайлсхийхэд хамгийн чухал хэрэгсэл болдог. "Функц сайн мэдэх = PHP сайн мэдэх" гэж хэлж болно.

Функц зарлах ба дуудах

function түлхүүр үгийг ашиглан зарлана, хаалт () -д параметруудыг бичнэ:

php
<?php
// Зарлах
function мэнд_хэлэх(): void {
    echo "Сайн уу, дэлхий!";
}

// Дуудах
мэнд_хэлэх();   // Сайн уу, дэлхий!

// Параметртэй функц
function нэрлэн_мэнд(string $нэр): void {
    echo "Сайн уу, $нэр!";
}

нэрлэн_мэнд("Батбаяр");   // Сайн уу, Батбаяр!
нэрлэн_мэнд("Дорж");      // Сайн уу, Дорж!

// Олон параметр
function нийлбэр(int $a, int $b): int {
    return $a + $b;
}

echo нийлбэр(10, 25);   // 35
?>

PHP-д функцийн нэр том/жижиг үсгийг ялгадаггүй — нийлбэр() ба НИЙЛБЭР() нэг юм. Гэхдээ жижиг үсгийг ашиглах нь заншил.

Анхдагч параметр (Default parameter)

Параметрт анхдагч утга оноовол дуудахдаа тухайн аргументыг орхиж болно:

php
<?php
function хүүгийн_тооцоо(float $дүн, float $хүү = 10.0, int $сар = 12): float {
    return $дүн * ($хүү / 100) * ($сар / 12);
}

// Бүх аргументыг дамжуулна
echo хүүгийн_тооцоо(1_000_000, 18.0, 6);    // 90000

// Анхдагч утгуудыг ашиглана
echo хүүгийн_тооцоо(1_000_000);              // 100000

// Зарим аргументыг дамжуулна
echo хүүгийн_тооцоо(1_000_000, 15.0);        // 150000

// Named argument (PHP 8+) — дарааллыг харгалзахгүй
echo хүүгийн_тооцоо(дүн: 500_000, сар: 3);  // 12500
?>

Утга буцаах (return)

Функц return ашиглан утга буцаана. Буцаах утгын төрлийг зарлаж болно:

php
<?php
// Нэг утга буцаах
function квадрат(float $тоо): float {
    return $тоо ** 2;
}

$үр_дүн = квадрат(9);
echo $үр_дүн;   // 81

// Массив буцаах
function статистик(array $тоонууд): array {
    return [
        "нийт"    => array_sum($тоонууд),
        "дундаж"  => array_sum($тоонууд) / count($тоонууд),
        "хамгийн_их" => max($тоонууд),
        "хамгийн_бага" => min($тоонууд),
    ];
}

$үр = статистик([10, 20, 30, 40, 50]);
echo $үр["дундаж"];   // 30

// void — утга буцаадаггүй функц
function лог_бичих(string $мессеж): void {
    echo "[" . date("H:i:s") . "] $мессеж\n";
    // return байхгүй, буцаах утга байхгүй
}
?>

Variadic функц — тодорхой бус тооны аргумент

php
<?php
// ... ашиглан дурын тооны аргументыг массив болгон хүлээнэ
function нийлбэр_олон(int ...$тоонууд): int {
    $нийт = 0;
    foreach ($тоонууд as $тоо) {
        $нийт += $тоо;
    }
    return $нийт;
}

echo нийлбэр_олон(1, 2, 3);            // 6
echo нийлбэр_олон(10, 20, 30, 40, 50); // 150

// Массивыг задлан дамжуулах (spread operator)
$тоонууд = [5, 10, 15];
echo нийлбэр_олон(...$тоонууд);        // 30
?>

Анонимous функц ба Arrow функц

php
<?php
// Anonymous функц — нэргүй, хувьсагчид хадгалж болно
$давхар = function(int $x): int {
    return $x * 2;
};

echo $давхар(7);   // 14

// Callback болгон дамжуулах
$тоонууд = [3, 1, 4, 1, 5, 9];
usort($тоонууд, function($a, $b) {
    return $a - $b;
});
echo implode(", ", $тоонууд);   // 1, 1, 3, 4, 5, 9

// Arrow функц (PHP 7.4+) — богино хэлбэр, гадна хувьсагчид автоматаар хандана
$үржигч = 3;
$гурав_дахин = fn(int $x) => $x * $үржигч;

echo $гурав_дахин(5);   // 15
echo $гурав_дахин(10);  // 30
?>

Практик жишээ — оролцогчийн картын мэдээлэл

php
<?php
function хэрэглэгчийн_мэдээлэл(
    string $нэр,
    int    $нас,
    string $хот = "Улаанбаатар",
    bool   $premium = false
): string {
    $зэрэглэл = $premium ? "⭐ Premium" : "Стандарт";
    return sprintf(
        "%s (%d нас) — %s — %s",
        $нэр, $нас, $хот, $зэрэглэл
    );
}

echo хэрэглэгчийн_мэдээлэл("Батбаяр", 25);
// Батбаяр (25 нас) — Улаанбаатар — Стандарт

echo хэрэглэгчийн_мэдээлэл("Дорж", 31, "Дархан", true);
// Дорж (31 нас) — Дархан — ⭐ Premium
?>

Дараагийн хичээлд:

Хамрах хүрээ буюу scope-г судална — локал ба глобал хувьсагчийн ялгаа, global ба static түлхүүр үгийг хэрхэн ашиглах, функц яагаад гаднах хувьсагчийг шууд харж чаддаггүйг ойлгоно.