PHP
Funksiyalar
- İstifadəçi funksiyalarının elan edilməsi və çağrılması
- Funksiyanın arqumentləri
- Lokal və qlobal dəyişənlər
- Qiymətin geri qaytarılması
- Arqument tip yoxlamaları
Çox vaxt proqramın bir çox hissələrində eyni kodu təkrar istifadə edirik. Eyni kodu proqramın müxtəlif hissələrində təkrar yazmamaq üçün funksiyalar düşünülüb.
PHP-də öncədən çoxlu sayda quraşdırılmış funksiya var. Bununla belə, özümüz də funksiyalar yarada bilərik.
İstifadəçi funksiyalarının elan edilməsi və çağrılması
Funksiya yaratmaq üçün onu elan etməliyik. Məsələn:
function funksiyanınAdı(arqument1, arqument2, ..., n sayda arqument)
{
kod;
}
İlk əvvəl function
açar sözü, ondan sonra funksiyanın adı, dairəvi mötərizələr daxilində bir-birindən vergüllə ayrılan arqumentlər, fiqurlu mötərizələr daxilində isə kod (həmçinin "funksiyanın bədəni" adlandırılır) gəlir. İstifadəçi tərəfindən yaradılmış funksiyaların adı PHP-yə quraşdırılmış funksiyalar kimi adlandırıla bilməz. Arqumentlərin sayı istənilən sayda ola bilər, yaxud ümumiyyətlə olmaya bilər. Funksiyaların adı dəyişənlərdə olduğu kimi eyni qaydalara əsaslanır. Əlavə olaraq onu qeyd edim, funksiya - bu, hər hansı əməliyyatdır. Ona görə funksiyanın adı adətən fellə başlanır. Məsələn, tövsiyə olunan funksiya adları:
showMessage(..) // mesajı göstərir
getAge(..) // yaşı geri qaytarır
calcSum(..) // məbləği hesablayır
createForm(..) // forma yaradır
checkPermission(..) // hansısa əməliyyata icazə verilməsini yoxlayır
Yuxarıdakı nümunədə funksiyaların adı onların gördüyü iş barədə məlumat verir.
Gəlin istifadəçinin adını ekrana çıxaran showUserName
funksiyası yaradaq:
<?php
function showUserName()
{
echo 'John';
echo '<br>';
}
Funksiyanı yaratdıq. İndi isə istifadəçinin adını ekrana çıxarmaq üçün funksiyanı çağıraq:
<?php
function showUserName()
{
echo 'John';
echo '<br>';
}
showUserName();
Nəticə:
John
Həmin funksiyanı bir neçə dəfə çağıraq:
<?php
function showUserName()
{
echo 'John';
echo '<br>';
}
showUserName();
showUserName();
showUserName();
Nəticə:
John
John
John
Əlbəttə, showUserName()
funksiyası çox sadə nümunədir, lakin funksiyanın əsas məqsədlərindən birini - eyni kodun təkrar yazılmamasını yaxşı izah edir. Əgər ekrana başqa ad çıxarmaq lazımdırsa, proqram kodunun yalnız bir hissəsində dəyişiklik edilir.
Funksiyanın arqumentləri
Funksiyanın arqumentləri funksiya çağrılan zaman ona ötürülən məlumatlardır. Məsələn, aşağıdakı showSumOfNumbers()
funksiyasına $num1
və $num2
arqumentləri ötürülür:
<?php
function showSumOfNumbers($num1, $num2)
{
echo $num1 + $num2;
echo '<br>';
}
showSumOfNumbers(10, 15);
showSumOfNumbers(5, -20);
Nəticə:
25
-15
Yuxarıdakı nümunədə showSumOfNumbers()
funksiyası 2 dəfə çağrılır, 1-ci dəfə 10 və 15, ikinci dəfə isə 5 və -20 qiymətləri funksiyaya ötürülür. Həmin qiymətlər funksiyanın daxilində cəmlənir və nəticəsi ekrana çıxarılır.
Gəlin showSumOfNumbers()
funksiyasını yenidən çağıraq və funksiyaya heç bir qiymət ötürməyək:
<?php
function showSumOfNumbers($num1, $num2)
{
echo $num1 + $num2;
echo '<br>';
}
showSumOfNumbers();
Nəticə:
Yuxarıdakı nümunədə showSumOfNumbers()
funksiyası iki arqument gözləyir. Funksiya çağrılan zaman isə ona heç bir qiymət ötürülmür, nəticədə səhv qeydə alınır. Funksiyanın arqumentlərinə başlanğıc qiymət təyin edərək bu problemi həll etmək olar:
<?php
function showSumOfNumbers($num1 = 7, $num2 = 29)
{
echo $num1 + $num2;
echo '<br>';
}
showSumOfNumbers();
Nəticə:
36
Arqumentlərin qiymətə və ünvana görə ötürülməsi
İndiyədək baxdığımız nümunələrdə arqumentlər funksiyaya qiymətə görə ötürülüb. Arqumentlərin qiymətə görə ötürülməsi zamanı qiymətlər lokal dəyişənlərə köçürülür. Bu o deməkdir ki, arqumentin qiyməti yalnız funksiyanın daxilində dəyişdirilə bilər və bu dəyişiklik funksiyadan kənarda arqumentin qiymətinə təsir etmir. Daha yaxşı başa düşmək üçün gəlin aşağıdakı nümunəyə baxaq:
<?php
function showNumber($x)
{
$x += 5;
echo $x;
echo '<br>';
}
$num = 4;
showNumber($num); // 9
echo $num; // 4
Nəticə:
9
4
showNumber()
funksiyasını çağırdıqda $num
dəyişəninin qiyməti (4) $x
lokal dəyişəninə köçürülür. Funksiyanın daxilində $x
dəyişəninin qiymətinin (4) üzərinə 5 əlavə edilir və ekranda 9 çap edilir. Artıq bildiyimiz kimi, funksiya öz işini bitirdikdə lokal dəyişənlər silinir.
Əgər funksiyanın ona ötürülən arqumentlərə dəyişiklik etməsini istəyirsinizsə, onda arqumentləri ünvana görə ötürməlisiniz. Bu məqsədlə arqumentin adının qarşısında ampersand (&) işarəsi qoymaq lazımdır:
<?php
function showNumber(&$x)
{
$x += 5;
echo $x;
echo '<br>';
}
$num = 4;
showNumber($num);
echo $num;
Nəticə:
9
9
Adlı arqumentlər
PHP 8-də əlçatan olan adlı arqumentlərin köməyilə artıq funksiyanın arqumentlərini parametrlərin adına görə də ötürmək mümkündür. Daha yaxşı başa düşmək üçün gəlin nümunələrə baxaq. PHP 8-dək funksiyanın arqumentləri yalnız funksiyanın özündə təyin edilmiş ardıcıllıqla ona ötürülə bilərdi:
<?php
$numbers = [15, 3, 7, 9, 10];
var_dump(array_search(10, $numbers));
Nəticə:
4
PHP 8-də isə adlı arqumentlərin köməyilə artıq funksiyanın arqumentlərini parametrlərin adına görə də ötürmək mümkündür. Adlı arqumentlər kodu daha oxunaqlı edir:
<?php
$numbers = [15, 3, 7, 9, 10];
var_dump(array_search(haystack: $numbers, needle: 10));
Nəticə:
4
Yuxarıdakı nümunədən göründüyü kimi adlı arqumentlərin ardıcıllığı vacib deyil.
Əgər funksiyanın başlanğıc qiyməti varsa, adlı arqumentlərdən istifadə daha faydalıdır. Məsələn, aşağıdakı kodda pad_type
arqumentinin qiymətini dəyişmək istəyiriksə, pad_string
arqumenti üçün başlanğıc qiyməti göstərməliyik:
<?php
$str = str_pad('Hello', 9, ' ', STR_PAD_BOTH);
str_pad()
funksiyasının yazılış sintaksisi aşağıdakı kimidir:
str_pad(
string $string,
int $length,
string $pad_string = " ",
int $pad_type = STR_PAD_RIGHT
): string
Yazılış sintaksisindən göründüyü kimi, str_pad()
funksiyasında pad_string
arqumenti üçün başlanğıc qiymət göstərilməlidir.
Adlı arqument isə başlanğıc qiyməti yazmamağa imkan verir. Məsələn:
<?php
$str = str_pad('Hello', 9, pad_type: STR_PAD_BOTH);
Lokal və qlobal dəyişənlər
Funksiyanın parametrləri və fiqurlu mötərizələr daxilində olan dəyişənlər lokal dəyişənlər adlanır. Funksiya öz işini bitirdikdə lokal dəyişənlər silinir. Funksiyadan kənar dəyişənlər isə qlobal dəyişənlər adlanır və funksiyanın daxilində əlçatmazdır. Lokal və qlobal dəyişənlərin adlarının eyni olması mümkündür, lakin bu, 2 fərqli dəyişəndir.
Daha yaxşı başa düşmək üçün gəlin aşağıdakı nümunəyə baxaq:
<?php
function showSumOfNumbers($num1, $num2)
{
$num1 += $num2;
echo $num1;
echo '<br>';
}
$num1 = 10;
showSumOfNumbers($num1, 20);
echo $num1;
Nəticə:
30
10
Yuxarıdakı nümunədə showSumOfNumbers
funksiyasına $num1
dəyişənin qiyməti - 10 və 20 ötürülür. Funksiyanın daxilində $num1
dəyişəninə $num1
və $num2
dəyişənlərinin qiymətlərinin cəmi mənimsədilir. $num1
dəyişənin qiyməti 30 olur və ekrana çıxarılır. Funksiyanın daxilində $num1
dəyişəni lokal dəyişəndir, ona görə funksiya işini bitirən kimi silinir.
Qiymətin geri qaytarılması
Funksiya, həmçinin nəticəni geri qaytara bilər. Geri qaytarılan qiymətlər istənilən tipdə, həmçinin massiv və obyekt ola bilərlər. Məsələn:
<?php
function sum($x, $y)
{
return $x + $y;
}
echo sum(10, 15) . '<br>';
echo sum(5, -15) . '<br>';
echo sum(23, 45) . '<br>';
Nəticə:
25
-10
68
PHP interpretatoru return
konstruksiyasından sonra funksiyanın işini dayandırır və həmin konstruksiyadan sonra yazılanlar artıq icra olunmur:
<?php
function sum($x, $y)
{
return $x + $y;
echo 'Hər kəsə salam';
echo 5 + 7;
}
echo sum(10, 15);
Nəticə:
25
Yuxarıdakı nümunədə sum()
funksiyası ona ötürülən qiymətlərin (10, 15) cəmini geri qaytarır. PHP interpretatoru return
konstruksiyasından sonra funksiyanın işini dayandırır və buna görə echo 'Hər kəsə salam'
, echo 5 +7
ifadələri icra olunmur.
Həmçinin geri qaytarılan qiyməti dəyişənə mənimsədə bilərik. Məsələn:
<?php
function sum($x, $y)
{
return $x + $y;
}
$total = sum(5, 3);
echo $total;
Nəticə:
8
return
konstruksiyası yalnız qiymət geri qaytarmaq üçün deyil, sadəcə funksiyanın işini dayandırmaq üçün də istifadə edilə bilər. Məsələn:
<?php
function sum($x = 8, $y = 7)
{
$sum = $x + $y;
if ($sum < 10) {
return;
}
echo $sum;
}
sum(5, 3);
sum();
Nəticə:
15
Yuxarıdakı nümunədə sum()
funksiyası 2 dəfə çağrılır. 1-ci dəfə 5 və 3 qiymətləri funksiyaya ötürülür. Funksiyanın daxilində 5 və 3 ədədlərinin cəmi $sum
dəyişəninə mənimsədilir. Sonra şərt yoxlanılır. Şərtin nəticəsi true (yalan) olduğuna görə return konstruksiyası icra olunur və funksiya işini dayandırır. 5 və 3 ədədlərinin cəmi ekranda göstərilmir. sum()
funksiyası 2-ci dəfə çağrıldıqda funksiyaya heç bir qiymət ötürülmür, başlanğıc qiymətlərdən (8 və 7) istifadə edilir. Eyni qayda ilə 8 və 7 ədədlərinin cəmi $sum
dəyişəninə mənimsədilir, sonra şərt yoxlanılır. 15 ədədi 10-dan böyük olduğuna görə şərtin nəticəsi false (yalan) olur və fiqurlu mötərizə daxilində olan return
konstruksiyası icra olunmur. 15 ədədi ekranda göstərilir.
Arqument tip yoxlamaları
Tip yoxlaması arqumentin qiymətinə məhdudiyyət qoyulmasını bildirir. Belə yoxlama PHP interpretatoruna arqumentin ala biləcəyi qiyməti göstərir. Nəticədə yanlış qiymət daxil edildikdə, PHP interpretatoru ekranda xəbərdarlıq göstərir. Arqument üçün aşağıdakı tip yoxlamaları əlçatandır:
Tip yoxlaması | Arqument üçün qayda | Dəstəklənən PHP versiyası |
---|---|---|
array | massiv olmalıdır | 5.1.0 |
bool | true və ya false olmalıdır | 7.0.0 |
float | həqiqi ədəd olmalıdır | 7.0.0 |
int | tam ədəd olmalıdır | 7.0.0 |
string | sətir olmalıdır | 7.0.0 |
mixed | istənilən tip ola bilər | 8.0.0 |
Funksiyanın elan edilməsi zamanı tip yoxlaması arqumentin adının qarşısında göstərilir.
<?php
function getSum(int $x, int $y)
{
return $x + $y;
}
echo getSum(5.5, true);
Nəticə:
6
PHP standart olaraq zəif tip-yoxlama rejimində işləyir və buna görə də arqumentin qiyməti avtomatik olaraq göstərilən tipə çevrilir. Yəni, getSum()
funksiyasını çağırdıqda ona ötürülən 5.5 qiyməti tam ədədə (int
tipi) çevrilərkən 5, true isə tam ədədə çevrilərkən 1 olur. Burda daha ətraflı oxuya bilərsiniz.
Arqumentin qiyməti avtomatik olaraq göstərilən tipə çevrilmədikdə PHP interpretatoru ekranda xəbərdarlıq göstərir. Məsələn:
<?php
function getSum(int $x, int $y)
{
return $x + $y;
}
echo getSum('üç', true);
Nəticə:
Ciddi tip-yoxlama rejimi
Artıq yuxarıda qeyd etdiyim kimi, PHP standart olaraq zəif tip-yoxlama rejimində işləyir və buna görə də arqumentin qiyməti avtomatik olaraq göstərilən tipə çevrilir. Ancaq ciddi tip-yoxlama rejimi də əlçatandır. Bunun üçün PHP faylının əvvəlində aşağıdakı direktiv yazılır:
declare(strict_types=1);
Məsələn:
<?php
declare(strict_types=1);
function getSum(int $x, int $y)
{
return $x + $y;
}
echo getSum(5.5, "15");
Yuxarıdakı PHP kodu işə salsaq, TypeError
səhvi qeydə alınacaq:
Bildirilir ki, getSum()
funksiyasına ötürülən birinci arqumentin tipi int
(tam ədəd) olmalıdır, lakin float
tipi ötürülüb.
Şərh yazmaq üçün hesabınıza daxil olun.