PHP. Функсияҳо

Печать

Функсияҳо барои ҷудо намудани барнома ба қисмҳои нисбатан мустақил истифода мешаванд. Функсияҳо татбиқи бисёр доранд. Барномаи мураккаб ба якчанд қисмҳои нисбатан содда тақсим карда мешавад ва барои ҳар як ин қисми функсияи алоҳида тартиб додан мумкин аст. Масалан, дар барнома метавонад ягон қисми коде мавҷуд бошад, ки он дар даҳҳо ҷои ин барнома такрор меёбад. Агар ҳамин қисми такрорёбандаи кодро дар намуди функсияи алоҳида нависем ва ин функсияро дар ҷойҳои даркорӣ истифода барем, ҳаҷми коди барнома ихтисор мешавад, намуди он соддатар мегардад.

Ислоҳ намудан, дигаргун кардан, санҷидан ва идораи функсияҳо нисбат ба кор бо барномаи калону мураккаб одатан осонтар аст. Масалан, ягон барнома бояд ҳисоби хариду фурӯши маҳсулотро барои ҳар моҳи давраи яксола иҷро кунад. Табиист, ки дохил намудани қиматҳои ибтидоӣ, даврҳои коркарди маълумот ва ба чоп баровардани натиҷаҳоро дар шакли функсияҳои алоҳида иҷро намоем. Агар ягон қадами ҳисоббарориро тағйир доданӣ шавем, фақат бо функсияи мувофиқ кор мекунем ва зарурияти расидан ба функсияҳои дигар нест.

Барои ҳар як функсияе, ки сохта мешавад, ба саволҳои зерин ҷавоб додан зарур аст:
- номи функсия чӣ аст?
- ба функсия, пеш аз ба кор шурӯъ намуданаш, чӣ хел қиматҳоро додан зарур аст?
- функсия ҳамчун натиҷаи иҷрои кораш чиро бозмегардонад?

Ибораи "функсия чиро бозмегардонад" маънои онро дорад, ки функсия баъди итмоми кори худ метавонад ягон маълумотро ҳосил кунад ва он маълумот ба ягон тағйирёбандаи намуди мувофиқ бахшида шуда метавонад.

Қимате, ки функсия онро қабул мекунад аргументи (параметри) функсия номида мешавад.

Мисол:

<?php
$x= -17;
$y=kv($x);
echo "Квадрати $x баробар аст ба $y<br>";
echo "Квадрати 45 баробар аст ба ".kv(45);

function kv($a) {
$b=$a*$a;
return $b;
}
?>

Бо function kv($a) мо нишон додаем, ки номи функсияи мо сохтаамон kv мебошад. Барои кори он ягон ададро ба он роҳӣ кардан зарур аст ва ин адад дар тағйирёбандаи $a нигоҳ дошта мешавад. Дар итмоми кори худ функсияи мо квадрати ин ададро ҳамчун натиҷа бозмегардонад. Қайд мекунем, ки дар тани функсия дохили қафсҳои { ва } гирифта шудааст. Дар амали $y=kv($x); қимати тағйирёбандаи x, ки ба барномаи асосӣ тааллуқ дорад, ба тағйирёбандаи $a, ки ба функсияи kv тааллуқ дорад, бахшида мешавад. Яъне, акнун қимати $a ба -17 баробар аст. Баъди ба $a қимат бахшидан, квадрати он ҳисоб шуда, ба $b бахшида мешавад. Ба воситаи амали return $b; функсияи kv қимати $b-ро ба барномаи асосӣ бозмегардонад ва ба $y бахшида мешавад. Хулоса, дар $y квадрати $x. Айнан ҳамин хел квадрати адади 45 ҳисоб карда мешавад, лекин он ба тағйирёбандае бахшида нашуда, бевосита ба экран бароварда мешавад.

Мисоли дигар:

<html> 
<head>
<title>Дарозии гипотенуза</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<form action="function1.php" method="get">
<p>Катети 1: <input type="text" name="katet1" /></p>
<p>Катети 2: <input type="text" name="katet2" /></p>
<p><input type="submit" value="Хисоб"/></p>
</form>
<?php
if(!isset($_GET['katet1']) || !isset($_GET['katet2'])) {
echo "Дарозии катетҳоро ворид намоед!<br>";
exit;
}
$k1 = $_GET['katet1'];
$k2 = $_GET['katet2'];
if($k1 == '')
echo "Дарозии катети 1-ро ворид намоед!<br>";
if($k2 == '')
echo "Дарозии катети 2-ро ворид намоед!<br>";
echo "Гипотенуза: ", hypotenuse($k1,$k2);

function hypotenuse($k1,$k2) {
$y=sqrt($k1*$k1+$k2*$k2);
return $y;
}
?>
</body>
</html>

САВОЛҲО БАРОИ МУСТАҲКАМКУНӢ
1. Мақсад аз истифодаи функсияҳо дар чист?
2. Иваз кардани номи тағйирёбандаҳои дохили як функсия ба функсияҳои дигар ягон таъсир дорад? Чаро?
3. Функсияи cube() созед, ки куби адади ҳақиқии ба он равоншавандаро ҳисоб мекунад.
4. Функсияи sum1N() созед, ки суммаи ҳамаи ададҳои натуралии аз 1 то n-и ба ин функсия равоншавандаро ҳисоб мекунад.
5. Функсияи asterisk() созед, ки ҳамчун аргумент адади натуралии n-ро қабул намояд ва сатри иборат аз n рамзи * (ситорача) бозгардонад.

Добавить комментарий


Защитный код
Обновить

Произведение «OFTOB.COM» публикуется на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Непортированная.