آموزش توابع در php

قدرت اصلی php از توابع آن نشئت می گیرد.

php بیش از 1000 تابع درونی دارد و علاوه بر آن ما می توانیم توابع دلخواه خود را نیز ایجاد کنیم.


توابع درونی php

php بیش از 1000 تابع درونی دارد که می توانند به طور مستقیم در داخل یک اسکریپت برای انجام یک وظیفه ی خاص، فراخوانی شوند. برای مشاهده ی مرجع توابع php می توانید به این آدرس مراجعه کنید.


توابع تعریف شده توسط کاربر در php

علاوه بر توابع درونی php، این امکان وجود دارد تا توابع دلخواه خودمان را نیز ایجاد کنیم.

  • یک تابع، در حقیقت قطعه ای از دستورات است که می توانیم از آن به تعداد دلخواه در یک برنامه استفاده کنیم.
  • یک تابع، وقتی که یک صفحه لود می شود، به طور اتوماتیک اجرا نمی شود.
  • یک تابع، با فراخوانی آن تابع، مورد اجرا قرار می گیرد.

 ایجاد یک تابع تعریف شده توسط کاربر در php

اعلانِ یک تابع تعریف شده توسط کاربر با کلمه ی کلیدی function آغاز می شود:

سینتکس:

function functionName() {
  کدهایی که باید اجرا شوند;
}

 

نکته: نام یک تابع باید با یک حرف(letter) یا یک آندرلاین(underscore) آغاز شود. نام تابع ها به حروف بزرگ و کوچک حساس نیست.

نکته: نامی به تابع بدهید که نشان دهنده ی کاری که انجام می دهد، باشد.

 

در مثال زیر، ما یک تابع به نام writeMsg() ایجاد می کنیم. علامت آکولاد باز شده(}) نشان دهنده ی شروع کدهای تابع است و علامت آکولاد بسته شده({) نشان دهنده ی پایان تابع است.

<!DOCTYPE html>
<html>
<body>

<?php
function writeMsg() {
  echo "Hello world!";
}

writeMsg();
?>

</body>
</html>

این تابع عبارت زیر را در خروجی نشان می دهد:

Hello world!

 برای فراخوانی این تابع، تنها باید نام تابع را بنویسیم و به دنبال آن از یک جفت پرانتز استفاده کنیم. مانند خط شماره 10 در کدهای بالا.


 آرگومان های تابع در php

به وسیله ی آرگومان ها(arguments) ما می توانیم اطلاعاتی را به تابع ها بدهیم. یک آرگومان، درست مثل یک متغیر است. آرگومان ها پس از نام تابع، و در درون پرانتزها قرار می گیرند. به هر تعداد که بخواهیم، می توانیم آرگومان ایجاد کنیم، فقط باید آنها را با کاما از یکدیگر جدا کنیم.

در مثال زیر، یک تابع، یک آرگومان به نام fname$ دارد. وقتی که تابع familyName() فراخوانی می شود، ما یک نام (مثلا Jani) را به این تابع پاس می دهیم و این نام در درون تابع مورد استفاده قرار می گیرد، این تابع نام های مختلفی را در خروجی نشان می دهد اما فامیلی یکسانی را همواره مورد استفاده قرار می دهد:

<!DOCTYPE html>
<html>
<body>

<?php
function familyName($fname) {
  echo "$fname Refsnes.<br>";
}

familyName("Jani");
familyName("Hege");
familyName("Stale");
familyName("Kai Jim");
familyName("Borge");
?>

</body>
</html>

 خروجی:

Jani Refsnes.
Hege Refsnes.
Stale Refsnes.
Kai Jim Refsnes.
Borge Refsnes.

 


در مثال زیر، یک تابع با دو آرگومان وجود دارد(آرگومان fname$ و آرگومان year$)

<!DOCTYPE html>
<html>
<body>

<?php
function familyName($fname, $year) {
  echo "$fname Refsnes. Born in $year <br>";
}

familyName("Hege","1975");
familyName("Stale","1978");
familyName("Kai Jim","1983");
?>

</body>
</html>

 خروجی:

Hege Refsnes. Born in 1975
Stale Refsnes. Born in 1978
Kai Jim Refsnes. Born in 1983 

 


انتخاب نوع داده(data type) در php آزاد است

در مثال بالا، ما مجبور نبودیم که به php بفهمانیم که نوع متغیر ما چیست. php به طور اتوماتیک یک نوعِ داده(data type) را برای متغیر مذکور بسته به مقداری که در داخل آن قرار می گیرد،  مشخص می کند. چونکه نوع داده ها در حالت strict تنظیم نشده اند، ما می توانیم کارهایی مثل اضافه کردن یک رشته به یک عدد صحیح(integer) را بدون ایجاد هیچ خطایی(error) را انجام دهیم. در PHP7 ویژگی مشخص کردن نوع داده ها اضافه شده است. این کار، به ما امکان می دهد تا وقتی که یک تابع را تعریف می کنیم، نوع داده ی مورد نظر را نیز مشخص کنیم و با اضافه کردن اعلان strict اگر نوع داده تطابق نداشته باشد، یک خطای Fatal Error ایجاد می شود. در مثال زیر، ما سعی می کنیم تا یک عدد و یک رشته را به تابع مورد نظر بدهیم بدون اینکه از حالت strict استفاده کنیم:

<?php
function addNumbers(int $a, int $b) {
  return $a + $b;
}
echo addNumbers(5, "5 days"); 

//  فعال نیست strict چون که حالت 
// "5 days" مقدار
// تغییر می یابد و مقدار 10 برگردانده می شود int(5) به
?>

 خروجی:

10

 


برای مشخص کردن حالت strict ما نیاز داریم دستور زیر را تنظیم کنیم:

declare(strict_types=1);

این دستور باید در ابتدایی ترین خط فایل php قرار گیرد. در مثال زیر، ما سعی نی کنیم تا یک عدد و یک رشته را به یک تابع ارسال کنیم اما در اینجا ما اعلان strict را مورد استفاده قرار می دهیم:

<?php declare(strict_types=1); // strict استفاده از حالت 

function addNumbers(int $a, int $b) {
  return $a + $b;
}
echo addNumbers(5, "5 days"); 
// فعال است strict چونکه حالت 
// "5 days" مقدار 
// یک رشته تلقی نمی شود و یک خطا ایجاد می شود
?>

 خروجی:

PHP Fatal error: Uncaught TypeError: Argument 2 passed to addNumbers() must be of the type integer, string given, called in /home/bWN0Ml/prog.php on line 6 and defined in /home/bWN0Ml/prog.php:3 Stack trace: #0 /home/bWN0Ml/prog.php(6): addNumbers(5, '5 days') #1 {main} thrown in /home/bWN0Ml/prog.php on line 3

 


نکته: اعلان strict کدها را مجبور می کند تا به روش مورد نظر کار کنند.


مقدار آرگومان پیش فرض در php

 مثال زیر نشان می دهد که چگونه می توانیم از یک پارامتر پیش فرض استفاده کنیم. مثلا اگر ما تابع setHeight() را بدون هیچ آرگومانی فراخوانی کنیم، از مقدار پیش فرض، بعنوان آرگومان استفاده می شود:

<?php declare(strict_types=1); // strict requirement ?>
<!DOCTYPE html>
<html>
<body>

<?php
function setHeight(int $minheight = 50) {
  echo "The height is : $minheight <br>";
}

setHeight(350);
setHeight();
setHeight(135);
setHeight(80);
?>

</body>
</html>

 خروجی:

The height is : 350
The height is : 50
The height is : 135
The height is : 80 

 


برگرداندن مقادیر یا return کردن آنها در php

برای اینکه بتوانیم یک مقدار را از داخل یک تابع به بیرون برگردانیم، می توانیم از دستور return استفاده کنیم:

<?php declare(strict_types=1); // strict requirement ?>
<!DOCTYPE html>
<html>
<body>

<?php
function sum(int $x, int $y) {
  $z = $x + $y;
  return $z;
}

echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4);
?>

</body>
</html>

 خروجی:

5 + 10 = 15
7 + 13 = 20
2 + 4 = 6 

 


تنظیم نوع داده ها برای دستور return در php

php7 همچنین از تعریف نوع داده برای دستور return پشتیبانی می کند. مانند تعریف نوع داده برای آرگومان های تابع، با فعال کردن حالت strict، اگر نوع داده ی دستور return تطابق نداشته باشد، یک خطای Fatal Error ایجاد خواهد شد. برای مشخص کردن یک نوع(type) برای دستور return در تابع، می توانیم از یک علامت دونقطه(:) در سمت راست پرانتزهای تابع، و قبل از آکولاد(}) باز شده ی تابع استفاده کنیم و پس از آن، نوع را مشخص کنیم. در مثال زیر، ما نوع داده را برای دستور return مشخص کرده ایم:

<?php declare(strict_types=1); // strict requirement
function addNumbers(float $a, float $b) : float {
  return $a + $b;
}
echo addNumbers(1.2, 5.2); 
?>

 خروجی:

6.4

 ما می توانیم یک نوع داده ی متفاوت را نسبت به نوع آرگومان ها برای دستور return مشخص کنیم، اما باید مطمئن شویم که دستور return نوع(type) صحیحی داشته باشد.

<?php declare(strict_types=1); // strict requirement
function addNumbers(float $a, float $b) : int {
  return (int)($a + $b);
}
echo addNumbers(1.2, 5.2); 
?>

 خروجی:

6

 


پاس دادن آرگومان به روش ارجاع در php

در php معمولا مقدار(value) آرگومان ها پاس داده می شود؛ یعنی یک کپی ازمقدار(value) مورد نظر، در داخل تابع کپی می شود و متغیری که در داخل تابع پاس داده شده است، نمی تواند تغییر کند. وقتی که آرگومان یک تابع به روش ارجاع پاس داده شود، اگر ما آرگومان را تغییر دهیم، باعث می شود متغیری که پاس داده شده است نیز تغییر کند. برای معرفی یک آرگومان به روش ارجاع، می توانید از عملگر & استفاده کنید:

استفاده از آرگومان به روش ارجاع برای آپدیت یک متغیر:

<!DOCTYPE html>
<html>
<body>

<?php
function add_five(&$value) {
  $value += 5;
}

$num = 2;
add_five($num);
echo $num;
?>

</body>
</html>

خروجی:

7

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.


تصویر امنیتی
تصویر امنیتی جدید

ستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعال