Codecourse

Funksiyalar

Redaktə edilib:

Çox vaxt proqramın müxtəlif hissələrində eyni əməliyyatı təkrar etməli oluruq.

Eyni kodu proqramın müxtəlif hissələrində təkrar yazmamaq üçün funksiyalar düşünülüb.

İstifadəçi funksiyalarının elan edilməsi və çağrılması

Yeni istifadəçi funksiyası yaratmaq üçün onu elan etməliyik. İlk əvvəl function açar sözü, ondan sonra funksiyanın adı, dairəvi mötərizələr daxilində parametrlər və fiqurlu mötərizələr daxilində əməliyyatlar (həmçinin "funksiyanın bədəni" adlandırılır) yerləşir.

<?php
  function funksiyanın adı(parametrlər)
  {
    ...Funksiyanın bədəni...    
  }
?>

Gəlin sadə bir funksiya yaradaq:

<?php
  function showMessage()
  {
    echo 'Salam, hörmətli istifadəçi.';    
  }
?>

Yeni funksiyanı adına görə - showMessage() çağıra bilərik:

<?php
  function showMessage()
  {
    echo 'Salam, hörmətli istifadəçi'.'<br>';    
  }
  
  showMessage();
  showMessage();
?>

Nəticə:

Salam, hörmətli istifadəçi
Salam, hörmətli istifadəçi

Funksiyanın parametr və arqumentləri

<?php
  function showMessage($name)
  {
    echo 'Salam, hörmətli istifadəçi '.$name.'<br>';    
  }
  
  showMessage('Emil');
?>

Nəticə:

Salam, hörmətli istifadəçi Emil

Yuxarıdakı nümunədə dairəvi mötərizələr daxilində göstərilmiş $name dəyişəni funksiyanın parametri adlanır. Funksiya çağırılan zaman ona ötürülməli olan qiymət və dəyişənlər funksiyanın arqumenti adlanır. Arqument kimi ifadə və hətta digər funksiyalar çıxış edə bilər. Məsələn, aşağıdakı nümunədə arqument kimi digər funksiya çıxış edir:

<?php
  function showMessage($name)
  {
    echo 'Salam, hörmətli istifadəçi '.$name.'<br>';    
  }
  
  function getName()
  {
    return 'Emil';
  }
  
  showMessage(getName());
?>

Nəticə:

Salam, hörmətli istifadəçi Emil

Parametrlərin qiymət və istinad üzrə ötürülməsi

Yuxarıdakı iki nümunədə funksiyanın arqumenti qiymətə görə ötürülür. Bu o deməkdir ki, arqumentin qiyməti yalnız funksiyanın daxilində dəyişdirilə bilər və funksiyadan kənarda arqumentin qiyməti olduğu kimi qalır.

<?php
  function showMessage($name)
  {
    echo 'Salam, hörmətli istifadəçi '.$name.'<br>';
    $name = 'Zaur';
    echo 'Salam, hörmətli istifadəçi '.$name.'<br>';
  }
  
  $name = 'Emil';
  echo "Başlanğıc qiymət: $name<br>";
  showMessage($name);
  echo "Funksiyanın çağrılmasından sonra: $name";
?>

Nəticə:

Başlanğıc qiymət: Emil
Salam, hörmətli istifadəçi Emil
Salam, hörmətli istifadəçi Zaur
Funksiyanın çağrılmasından sonra: Emil

Funksiyanın öz arqumentinə dəyişlik etməsi üçün parametrin qarşısında ampersand & yazmaq lazımdır.

<?php
  function showMessage(&$name)
  {
    echo 'Salam, hörmətli istifadəçi '.$name.'<br>';
    $name = 'Zaur';
    echo 'Salam, hörmətli istifadəçi '.$name.'<br>';
  }
  
  $name = 'Emil';
  echo "Başlanğıc qiymət: $name<br>";
  showMessage($name);
  echo "Funksiyanın çağrılmasından sonra: $name";
?>

Nəticə:

Başlanğıc qiymət: Emil
Salam, hörmətli istifadəçi Emil
Salam, hörmətli istifadəçi Zaur
Funksiyanın çağrılmasından sonra: Zaur

Susmaya görə parametrlər

Funksiyanın parametrlərinə susmaya görə qiymət mənimsədilə bilər.

<?php
  function showMessage($name = 'Zaur')
  {
    echo "Salam, hörmətli istifadəçi $name <br>";
  }
  
  $name = 'Emil';
  showMessage($name);
  showMessage(null);
  showMessage();
?>

Nəticə:

Salam, hörmətli istifadəçi Emil
Salam, hörmətli istifadəçi
Salam, hörmətli istifadəçi Zaur

Diqqət edin ki, susmaya görə təyin edilmiş bütün parametrlər qiymət və istinad üzrə ötürülən parametrlərdən sonra yazılmalıdır, əks halda kod gözlədiyiniz kimi işləməyə bilər. Məsələn, aşağıdakı nümunə düzgün deyil:

<?php
function showMessage($name = 'Zaur', $greeting)
{
  echo "$greeting, hörmətli istifadəçi $name";
}

$greeting = 'Salam';
showMessage($greeting);
?>

Nəticə:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function showMessage(), 1 passed in D:\OSPanel\domains\mysite\function.php on line 17 and exactly 2 expected in D:\OSPanel\domains\mysite\function.php:11 Stack trace: #0 D:\OSPanel\domains\mysite\function.php(17): showMessage('Salam') #1 {main} thrown in D:\OSPanel\domains\mysite\function.php on line 11

Aşağıdakı nümunə isə düzgündür:

<?php
function showMessage($greeting, $name = 'Zaur')
{
  echo "$greeting, hörmətli istifadəçi $name";
}

$greeting = 'Salam';
showMessage($greeting);
?>

Nəticə:

Salam, hörmətli istifadəçi Zaur

Dəyişən sayda parametrlər

Dəyişən sayda arqument qəbul edən funksiya yaratmaq üçün parametrin qarşısında nöqtələr (...) qoymaq lazımdır. Belə olan halda parametr funksiyanın daxilində massiv kimi istifadə edilir.

<?php
function showMessage(...$names)
{
  foreach($names as $name)
  {
    echo "Salam, hörmətli istifadəçi $name<br>".PHP_EOL;
  }
}

showMessage('Emil', 'Zaur', 'Elçin', 'Kamil');
?>

Nəticə:

Salam, hörmətli istifadəçi Emil
Salam, hörmətli istifadəçi Zaur
Salam, hörmətli istifadəçi Elçin
Salam, hörmətli istifadəçi Kamil

Parametrlərin tipi

PHP 5 versiyasından başlayaraq parametrlərin tipini (class, interface, arraycallable) göstərmək mümkün idi. PHP 7-də istifadə edilə bilən tiplərin sayı genişləndirilib: bool (məntiqi), int (tam ədəd), float (həqiqi ədəd), string (sətir)object (obyekt). Parametrin tipini elan etmək üçün onun adının qarşısında lazımi tipi yazmaq lazımdır.

<?php
function getSum(int $x, int $y)
{
  echo $x + $y;
}

getSum(12.7, 5.2);
?>

Nəticə:

17

Yuxarıdakı nümunədən göründüyü kimi PHP interpretatoru funksiyaya arqument qismində ötürülən həqiqi ədədi avtomatik olaraq tam ədədə çevirir.

İndi isə gəlin parametrlərin tipi göstərilməyən nümunəyə baxaq:

<?php
function getSum($x, $y)
{
  echo $x + $y;
}

getSum(12.7, 5.2);
?>

Nəticə:

17.9
203 baxış

Şərhlər: