در این جلسه از سری آموزشهای پیاچپی قصد داریم تا به یکی از مهمترین و در عین حال لذتبخشترین مباحث بپردازیم. توابع در هر زبان برنامهنویسی کاربرد بسیاری دارند و باعث میشوند تا در هنگام کدنویسی بتوانیم پروژه خود را منسجمتر تولید کنیم. در ادامه مطلب با ما همراه باشید.
توابع از جمله مهمترین مباحثی است که در آموزش پیاچپی باید یاد بگیرید. این مبحث علیرغم اهمیت بالا و کاربرد فراوان بسیار آسان و لذتبخش است. پس خود را برای یک سفر کوتاه اما به یادماندنی در دنیای PHP آماده کنید.
تابع (Function) چیست؟
اگر درس ریاضیات دوران دبیرستان خود را بهیاد داشته باشید، تابع را به ماشینی تشبیه میکردیم که یک ورودی را گرفته و سپس عملیات خاصی را بر روی آن انجام داده و در نهایت یک خروجی را تولید میکند. در پیاچپی نیز تعریف تابع همین است و توابع این زبان برنامهنویسی یک داده ورودی را دریافت میکنند، عملیات موردنظر ما را بر روی آن داده یا دادهها انجام داده و نهایتا خروجی مورد نظرمان را تولید میکنند. در شکل زیر به سادهترین حالت ممکن روش عملکرد تابع را برای شما رسم کردهام:
<?php
function MyFunc (){
//some oprates on code!
}
?>
همانطور که در کد بالا میبینید برای تعریف یک تابع ابتدا باید کلمه کلیدی function را نوشته و سپس نام موردنظر را برای تابع تایپ کنیم. سپس در صورتی که تابع ما نیاز به ورودی داشته باشد باید آنها را در پرانتز مقابل نام تابع تعریف کنیم. در نهایت نیز عملیاتی که باید بر روی دادهها انجام شود بین } و { قرار داده میشود. دقت کنید در کد بالا ما نام تابع را MyFunc قرار دادهایم و این نام دلخواه است. فقط باید توجه داشته باشید در نامگذاری توابعی که تعریف میکنید، کلمات کلیدی پیاچپی نظیر دستورات پیشفرض را به عنوان نام تابع نمیتوانید انتخاب کنید.
در پیاچپی میتوان توابعی تعریف کرد که نیاز به ورودی نداشته باشند و این نوع توابع در واقع سادهترین نوع ممکن توابع به حساب میآیند. به مثال زیر دقت کنید:
<?php
//define func
function bigHello()
{
echo “<h1>hello!</h1>”;
}
//call or using func
bigHello();
?>
در کد بالا ابتدا یک تابع به نام bigHello را معرفی کردیم و کد داخل آن را چاپ عبارت hello در بین تگ h1 تعیین کردهایم. اما همانطور که اشاره شد تا زمانی که تابع را فراخوانی نکنیم هیچ اتفاقی نخواهد افتاد و به همین دلیل در خط بعدی با نوشتن نام تابع به صورتی که مشاهده میکنید آن را فراخوانی کردهایم. نتیجه کد بالا چاپ عبارت Hello! در بین تگ h1 خواهد بود. حال شما میتوانید به هر تعداد که میخواهید این تابع را فراخوانی کنید و طبیعتا به ازای هر بار فراخوانی تابع، یکبار کد داخل آن اجرا میشود.
این یکی از دلایل شیرین بودن مبحث توابع است که در اول مطلب اشاره کردم. شما یکبار کد موردنظر را مینویسید و سپس میتوانید هر چقدر که نیاز داشته باشید از آن در پروژه خود استفاده کنید. در پروژههای بزرگتر استفاده از توابع باعث میشود تا کدنویسی شما به حداقل برسد.
پارامترها در توابع یا همان ورودی توابع
حالت استاندارد توابع همانطور که گفتیم این است که یک یا چند ورودی دریافت کند. ورودیها را میتوان از طریق پارامترها به تابع ارسال کرد. برای این منظور به ازای هر ورودی که نیاز داریم تابع آنها را دریافت کند، یک متغیر به همان روشی که متغیرها را تعریف میکردیم در داخل پرانتز مقابل نام تابع، وارد کنیم. به مثال زیر توجه کنید:
<?php
function myFunc ($name, $age)
{
echo “your name is $name and your age is $age”;
}
myFunc(“mojtaba”, “25”);
?>
تابع بالا دو پارامتر ورودی دریافت میکند و مقدار آنها را در متغیرهایی که خود تعریف کردهایم قرار میدهد. در مثال بالا نام و سن کاربر توسط تابع ما دریافت میشود و سپس جمله موردنظر نام و سن کاربر را اعلام میکند. همانطور که مشاهده میکنید برای استفاده از این تابع ابتدا نام آن را نوشته و سپس ورودیهای آن را در پرانتز مقابلش وارد میکنیم. از آنجا که تابع ما نیاز به دو پارامتر ورودی دارد، پس هر پارامتر را با یک کاما از دیگری جدا میکنیم. اگر نیاز به تعداد ورودی بیشتر داشته باشیم باید به همین صورت آنها را با کاما از هم جدا کنید.
اگر در کد بالا، به جای دو ورودی، یک ورودی را وارد کنید، با خطای پیاچپی مواجه خواهید شد چرا که کامپایلر php در این شرایط نیاز دارد تا دو ورودی به تابع ما ارسال شود.
برای درک بهتر ورودیها در توابع به مثال دیگری توجه کنید. قصد داریم یک تابع بنویسیم که دو عدد را از کاربر گرفته و آنها را در هم ضرب و سپس نتیجه را چاپ کند.
<?php
function Zarb ($a, $b)
{
$c = $a * $b;
echo $c;
}
//using our Zarb Function
Zarb (3, 5);
?>
نتیجه اجرای کد بالا چاپ عدد ۱۵ در مروگر کاربر خواهد بود. در مثال بالا ابتدا دو ورودی از کاربر گرفته و آنها را در متغیرهایی به نام a و b ذخیره کردهایم. سپس یک متغیر داخلی به نام c در تابع خود تعریف میکنیم و مقدار حاصل از ضرب a و b را در آن قرار میدهیم. سپس مقدار c را به عنوان خروجی تابع چاپ میکنیم.
استفاده از آرگومانهای ورودی پیشفرض در توابع
در مثالهای قبل همانطور که اشاره کردیم به تعداد پارامترهای ورودی که برای هر تابع تعریف میکنیم، باید در هنگام فراخوانی آن تابع، به همان تعداد ورودی برای آن تعریف کنیم. اما میتوانید یک مقدار پیشفرض برای هر کدام از ورودیهای تابع تعریف کنیم تا در صورتی که کاربر آن ورودی را تعریف نکرد، اسکریپت نوشته شده توسط ما با خطا مواجه نشود.
به مثال زیر دقت کنید:
<?php
function myFunc ($name = “mojtaba”)
{
echo $name;
}
myFunc();
?>
در کد بالا همانطور که میبینید ما یک آرگومان ورودی برای تابع خود تعریف کردهایم. اما اینبار یک مقدار پیشفرض را نیز به آن نسبت دادهایم. سپس تابع را فراخوانی کردهایم ولی هیچ آرگومانی را به آن نسبت ندادهایم! در این حالت دیگر با خطای پیاچپی مواجه نخواهیم شد چرا که مقدار پیشفرض متغیر name چاپ خواهد شد.
مقادیر بازگشتی در توابع
تا اینجای کار ما خروجی توابع موردنظرمان را چاپ میکردیم. اما گاهی در کدنویسی شرایطی پیش میآید که نیاز به مقدار بازگشتی یک تابع داریم. اما مقدار بازگشتی یعنی چه؟ در تعریف متغیرها اگر به یاد داشته باشید گفتیم که هر متغیر یک مقدار را در خود جای داده است. حال اگر بخواهیم خروجی یک تابع را در یک متغیر ذخیره کنیم تا بتوانیم بعدا اعمال دیگری را بر روی آن انجام دهیم، در این شرایط استفاده از روشهای بالا به کارمان نمیآید.
در مثال زیر میخواهیم یک تابع تعریف کنیم که دو عدد را از ورودی گرفته و آنها را در هم ضرب میکند. اما اینبار به جای چاپ خروجی، مقدار نهایی حاصلضرب دو عدد ورودی را به صورت یک متغیر خروجی بازگشت میدهد.
<?php
function Zarb($a, $b)
{
$c = $a * $b;
return $c;
}
echo Zarb(2,3);
?>
در مثال بالا برای روشنتر شدن موضوع ابتدا مقدار بازگشتی تابع Zarb را در متغیری به نام c ریختهایم و سپس مقدار c را با دستور echo چاپ کردهایم. نهایتا خروجی کد بالا عدد ۲۰ خواهد بود. حالا احتمالا به خوبی مفهوم مقدار بازگشتی در توابع را یاد گرفتهاید.
مبحث توابع نیز در این لحظه به پایان رسید. برای تمرین این جلسه سعی کنید چند تابع با کاربردهای مختلف برای خود بنویسید و از آنها در کدهای خود استفاده کنید. همچنین سعی کنید توابعی بنویسید که مقدار بازگشتی داشته باشند و سپس با مقادر بازگشتی همانند مثال بالا، عملیات خاصی را انجام دهید.
در جلسه بعد اولین پروژه عملی این دوره آموزشی را با هم ایجاد خواهیم کرد و در هر جلسه علاوه بر یادگیری مباحث جدید و کاربردی، پروژه خود را کاملتر میکنیم. همچنین در صورتی که سوالی در مورد مباحث این جلسه دارید آن را در بخش نظرات اعلام کنید.