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 түлхүүр үгийг хэрхэн ашиглах, функц яагаад гаднах хувьсагчийг шууд харж чаддаггүйг ойлгоно.