تابع یا فانکشن در php چیست

تابع، تکه کدی است که می توان چند مرتبه از آن استفاده کرد و تنها زمانی که فرخوانده (call) شود اجرا می شود.

درواقع کاربرد توابع زمانی مشخص می شود که ما نیاز به انجام یک کار تکراری برای چند مرتبه داریم. به جای اینکه تکه کد مورد نظر، چندین بار در نقاط مختلف برنامه نوشته شود،‌آن را به صورت یک تابع ایجاد می کنیم تا در هر زمان که نیاز به آن داشتیم فراخوانی یا call کنیم.

مثلا، در حال نوشتن برنامه ای هستیم که این برنامه با اعداد سر و کار دارد. 2 عدد را میگیرد و اعمال ریاضی ضرب یا جمع انجام می دهد. بنابراین عملکرد ضرب و جمع را می توانیم در توابع یا فانکشن ها تعریف کنیم.

مثال ذکر شده ساده بود تا بتوانیم مفهوم و هدف استفاده از فانکشن ها را بیان کنیم. در پروژه ها و برنامه های بزرگ تر، این کار مزیت بزرگی محسوب می شود. زیرا زمانی که تغییری در محاسبات ضرب یا جمع انجام بگیرید، تنها کافیست بر روی فانکشن مربوطه تغییرات انجام شود، بنابراین تغییرات در تمامی مکان هایی از برنامه که از آن فانکشن استفاده شده است اعمال خواهد شد.

همچنین این کار باعث راحتی در اشکال زدایی (دیباگینگ) برنامه خواهد شد. این کار در بهینه شدن کد نویسی و کاهش حجم کد تکراری تاثیر دارد و در بلند مدت و نگه داری پروژه کمک شایانی به شما خواهد کرد.

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

تعریف فانکشن در php

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

برای واضخ شدن موضوع کد زیر را ببینید.

function function_name($parameter1, $parameter2) {
    return $parameter1 + $parameter2;
}

برای تعریف فانکشن در php از کلمه کلیدی function استفاده می کنیم. سپس نام فانکشن را مشخص میکنیم و در پرانتز بعدی پارامتر هایی که فانکشن نیاز دارد را تعریف خواهیم کرد.

نکات زیر در تعریف فانکشن ها می تواند مهم باشد

  • فانکشن ها می توانند بیشتر از یک پارامتر یا اصلا پارامتر نداشته باشند
  • پارامتر ها با استفاده از ویرگول (,) از هم جدا می شوند
  • یک فانکشن می تواند هر نوع مقداری را به عنوان خروجی برگرداند
  • یک فانکشن می تواند هیچ مقداری را به عنوان خروجی برنگرداند

مثال زیر یک فانکشن را تعریف می کند که پارامتری ندارد و هیچ مقداری را به عنوان خروجی بر نمی گرداند

function say_hello() {
    echo "Hello World";
}

فانکشن بالا در جایی که فراخوانی می شود. مقدار Hello World را چاپ می کند.

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

function sum($num1, $num2) {
    $result = $num1 + $num2;
    return $result;
}

دو پارامتر برای فانکشن sum با نام های num1 و num2 تعریف کردیم. یعنی هرکجایی از برنامه که بخواهیم فانکشن sum را فراخوانی کنیم باید دو پارامتر به آن بدهیم. جمع دو پارامتر num1 و num2 را در متغیر result قرار داده ایم و با استفاده از کلمه کلیدی return مقدار آن را به خروجی فانکشن می بریم.

در ادامه به نحوه فراخوانی فانکشن ها در php می پردازیم.

فراخوانی فانکشن ها در php

بعد از تعریف فانکشن ما نیاز به فراخوانی آن ها داریم. کد زیر نحوه فراخوانی یک فانکشن را نشان می دهد.

function sum($num1, $num2) {
    $result = $num1 + $num2;
    return $result;
}

$sum = sum(10, 5);

echo $sum;

همانطور که مشخص است با استفاده از sum(10,5) فانکشن مورد نظرمان را فراخوانی کردیم. و بر اساس کد های موجود در بدنه فانکشن، انتظار این را داریم مقدار 15 در متغیر sum انتساب داده شود.

بنابراین خط آخر مقدار 15 را چاپ خواهد کرد.

پارامتر های پیش فرض

 پارامتر هایی که در زمان تعریف فانکشن ها مشخص می شوند، می توانند مقداری را به عنوان پیش فرض داشته باشند. این کار باعث می شود پارامتر هایی که مقادیر پیش فرض دارند، مقداردهی آنها در زمان فراخوانی آنها اختیاری در نظر گرفته شوند.

مثال زیر را ببینید.

function func_1($param1, $param2) {
    echo $param1 . ' ' . $param2;
}

funct_1('Hello', 'World'); // output -> Hello World

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

function func_1($param1, $param2 = 'Earth') {
    echo $param1 . ' ' . $param2;
}

func_1('Hello'); // output -> Hello Earth

 در فانکشن بالا پارامتر دوم مقدار پیش فرض Earth را دارد. یعنی در زمان فراخوانی این فانکشن، مقدار دهی پارامتر دوم آن اختیاری است و مقدار پیش فرض به طور خودکار در آن قرار می گیرد.

 فهرست پارامتری متغیر یا Variable Parameter List

یک تابع را نمی توان با آرگومان های کمتری به نسبت آنچه در اعلان آن مشخص شده فرا خواند،‌اما می توان آن را با آرگومان های بیشتری فراخوانی کرد. این خصوصیت باعث می شود تعداد قابل تغییری از آرگومان ها را به تابع انتقال دهید که می توان با یک سری از توابع دیگر به آنها دسترسی پیدا کرد.

تابع func_get_arg

با این فانکشن می توانیم  به مقادیری که هنگام فراخوانی تابع ارسال شده اند دسترسی داشته باشیم. مثال زیر را ببینید تا نحوه کارکرد آن را درک کنید.

function new_function() {
    $param1 = func_get_arg(0);
    $param2 = func_get_arg(1);
    $param3 = func_get_arg(2);

    echo $param1 . $param2 . $param3;

}

new_function(1, 2, 3); // output-> 123

 مقدار 123 بعد از فراخوانی فانکشن در خروجی چاپ خواهد شد.

دستور return

دستور return یک دستور پرشی است که باعث خاتمه یافتن اجرای تابع می شود و به محل فراخواندن آن باز می گردیم.

function func_a() {
    return; // خروج از تابع
}

 همچنین می توانیم بعد از دستور return مقداری را به عنوان مقدار بازگشتی تابع مشخص کنیم.

function hi() {
    return "Hi";
}

function buy() {
    return "Bye";
}

echo hi() . ' ' . bye(); // خروجی -> Hi Bye

 نوع برگشتی تابع می تواند هر نوع عددی، بولین، رشته یا آبجکتی از یک کلاس باشد.

متغغیر ها و انواع داده ها در php

 همچنین تابعی که مقدار خروجی ندارد، null ارزیابی می شود.