تابع در PHP بلوکهای کدی هستند که برای انجام یک کار خاص طراحی شدهاند و میتوانند چندین بار در برنامه فراخوانی شوند. استفاده از تابعها در برنامهنویسی به شما این امکان را میدهد که کدهای خود را modular کرده و از تکرار آنها جلوگیری کنید. هر تابع میتواند ورودیهایی به نام پارامتر دریافت کند و خروجیهایی به نام مقدار برگشتی «Return Value» تولید کند که میتواند در سایر قسمتهای برنامه استفاده شود. تعریف و استفاده از تابع در PHP برای نوشتن کدهای منظمتر، خواناتر و قابل نگهداریتر حیاتی است.
مقدمه
تابع در PHP میتوانند به صورت توابع داخلی یا توابع کاربر تعریفشده «User-Defined Functions» وجود داشته باشند. توابع داخلی مانند ()strlen و ()array_merge از پیش در زبان PHP تعریف شدهاند، در حالی که شما میتوانید توابع خود را برای انجام عملیات خاص بر روی دادهها ایجاد کنید. علاوه بر این، نحوه ارسال پارامترها به تابعها میتواند به صورت مقدار یا ارجاع باشد که این امر بر نحوه تعامل تابع با دادهها تأثیر میگذارد. فهم کامل از نحوه عملکرد تابع در PHP به شما کمک میکند که برنامههای خود را به شیوهای موثرتر و کارآمدتر بنویسید.
در این آموزش، از سری مقاله های مجله پی استور با تابع در PHP آشنا خواهید شد و نحوه ارسال پارامترها به صورت مقدار «Pass by Value» و ارجاع «Pass by Reference» را خواهید آموخت.
پارامترهای تابع در PHP
یک تابع میتواند بدون پارامتر باشد یا شامل یک یا چند پارامتر باشد.
<?php function function_name(parameter_list) { }
هنگامی که یک تابع دارای چندین پارامتر باشد، باید آنها را با استفاده از ویرگول ( , ) از یکدیگر جدا کنید.
مثال زیر تابعی با نام ()concat را تعریف میکند که دو رشته را به یکدیگر متصل کرده و یک رشتهی واحد ایجاد میکند:
<?php function concat($str1, $str2) { return $str1 . $str2; }
تابع ()concat دارای دو پارامتر str1 و str2 است.
هنگامی که تابع ()concat را فراخوانی میکنید، باید دو آرگومان را که با این پارامترها مطابقت دارند، ارسال نمایید. به عنوان مثال:
<?php function concat($str1, $str2) { return $str1 . $str2; } $greeting = concat('Welcome ', 'Admin'); echo $greeting;
در این مثال، پارامتر str1 اولین آرگومان Welcome را دریافت خواهد کرد و پارامتر str2 دومین پارامتر Admin را دریافت میکند.
اگر تعداد پارامترهایی که به تابع ارسال میکنید کمتر از تعداد پارامترهای آن باشد، PHP خطا ایجاد خواهد کرد. به عنوان مثال:
<?php function concat($str1, $str2) { return $str1 . $str2; } $greeting = concat('Welcome'); echo $greeting;
هنگامی که چندین پارامتر را به یک تابع ارسال میکنید، میتوانید لیست پارامترها را به صورت عمودی تقسیم کنید تا کد خواناتر شود، مانند مثال زیر:
<?php function concat($str1, $str2) { return $str1 . $str2; } $greeting = concat( 'Welcome ', 'Home' ); echo $greeting;
استفاده از لیست عمودی برای پارامترها زمانی که تعداد پارامترها زیاد است، یک عملکرد خوب به شمار میرود.
ویرگول اضافی در php
از PHP 7.0 به بعد، لیست پارامترها میتواند شامل یک ویرگول اضافی ( , ) باشد که مفسر PHP آن را نادیده خواهد گرفت. به عنوان مثال:
$greeting = concat( 'Welcome ', 'Home', );
از PHP 8.0 به بعد، میتوانید ویرگول اضافی ( , ) را در لیست پارامترها به این صورت قرار دهید:
function concat( $str1, $str2, ) { return $str1 . $str2; }
ارسال آرگومان ها به صورت مقدار در php
مثال زیر را در نظر بگیرید:
<?php $counter = 1; function increase($value) { $value+= 1; echo $value. <br>; // 2 } // increase the counter increase($counter); echo $counter . <br>; // 1
خروجی:
۲ ۱
نحوه عملکرد این فرآیند
- اولاً، متغیر counter را تعریف کرده و مقدار آن را به یک مقداردهی اولیه یک تنظیم کنید.
- دوم، تابع ()increase را تعریف کنید که پارامتر را به اندازه یک واحد افزایش داده و آن را نمایش دهد.
- سوم، تابع ()increase را فراخوانی کرده و متغیر counter را به آن ارسال کنید.
- در نهایت، متغیر $counter را نمایش دهید.
هنگامی که متغیر counter را به تابع ()increase ارسال میکنید، تابع مقدار آن را به اندازه یک واحد افزایش میدهد. بنابراین، زمانی که مقدار counter را داخل تابع نمایش میدهید، مقدار ۲ خواهد بود. اما پس از فراخوانی تابع، مقدار counter همچنان یک باقی میماند. این بدان معنی است که تابع ()increase مقدار متغیر counter را در خارج از تابع تغییر نمیدهد. آنچه که اتفاق میافتد این است که زمانی که متغیر counter را به تابع ()increase ارسال میکنید، تابع یک کپی از متغیر counter ایجاد کرده و آن را تغییر میدهد. در واقع، متغیر اصلی تغییری نمیکند.
زمانی که مقدار یک پارامتر در داخل تابع تغییر میکند ولی در خارج از تابع تغییر نمیکند، به این معنی است که پارامتر به صورت مقدار ارسال شده است. به طور پیشفرض، در PHP پارامترها به صورت مقدار ارسال میشوند. اگر بخواهید که تابع پارامترها را تغییر دهد، باید پارامترها را به صورت ارجاع ارسال کنید.
ارسال پارامترها به صورت ارجاع در php
برای ارسال یک پارامتر به صورت ارجاع، باید از اپراتور & قبل از نام پارامتر در تعریف تابع استفاده کنید، مانند مثال زیر:
<?php $counter = 1; function increase( &$value ) { $value += 1; echo $value . <br>; // 2 } // increase the counter increase($counter); echo $counter . <br>; // 2
خروجی:
۲ ۲
در این مثال، تغییر متغیر counter هم داخل تابع و هم خارج از تابع اعمال میشود.
نتیجه گیری
تابع در PHP ابزاری قدرتمند برای سازماندهی و بهبود قابلیتهای برنامه هستند. با استفاده از تابعها میتوان کدهای تکراری را کاهش داده و فرآیندهای پیچیده را به قطعات کوچکتر و قابل مدیریت تقسیم کرد. علاوه بر این، ارسال پارامترها به صورت مقدار یا ارجاع به توسعهدهندگان این امکان را میدهد که نحوه تعامل با دادهها را کنترل کنند و بر اساس نیازهای خاص، رفتار توابع را تنظیم کنند. در مجموع، آشنایی با مفاهیم تابع و نحوه کارکرد آنها در PHP برای نوشتن کدهای بهینه و مقیاسپذیر ضروری است.