پارامترهای تابع در PHP به عنوان ورودیهای تابع عمل میکنند که به آن اجازه میدهند دادهها را از خارج از تابع دریافت کرده و بر روی آنها عملیات خاصی انجام دهند. زمانی که تابعی تعریف میشود، میتوان پارامترهایی برای آن مشخص کرد که در زمان فراخوانی تابع، مقادیری به آنها ارسال میشود. این پارامترها میتوانند به صورت ضروری «required» یا اختیاری «optional» باشند و به توسعهدهندگان این امکان را میدهند که توابع خود را برای انجام کارهای خاص با ورودیهای مختلف طراحی کنند.
مقدمه
پارامترهای تابع در PHP به دو روش مقدار «pass by value» یا ارجاع «pass by reference» ارسال میشوند. در روش مقدار، یک کپی از دادههای ارسالشده به تابع منتقل میشود و هر گونه تغییرات در داخل تابع بر دادههای اصلی تأثیری ندارد. در حالی که در روش ارجاع، دادهها به صورت مستقیم به تابع ارسال میشوند و تغییرات اعمالشده داخل تابع بر دادههای اصلی نیز تأثیر خواهد گذاشت. مدیریت درست این پارامترها و نحوه ارسال آنها به توابع، تأثیر زیادی در عملکرد و کارایی برنامههای نوشتهشده در PHP دارد. در این آموزش، با پارامترهای تابع در PHP آشنا خواهید شد و نحوه ارسال پارامترها بهصورت مقدار و مرجع را خواهید آموخت.
پارامترهای تابع در PHP
پارامترهای تابع در 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 7.0، لیست پارامترها میتواند شامل یک کاما در انتها باشد که مفسر PHP آن را نادیده میگیرد. برای مثال:
$greeting = concat( 'Welcome ', 'Home', );
متغیر greeting مقدار برگشتی از تابع ()concat را دریافت میکند، در حالی که پارامترها بهصورت عمودی فهرست شدهاند و یک کاما اضافی در انتها قرار دارد، که از نسخه PHP 7.0 به بعد مجاز است.
function concat( $str1, $str2, ) { return $str1 . $str2; }
ارسال پارامترها بهصورت مقدار
مثال زیر را در نظر بگیرید:
<?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 را کپی کرده و نسخه کپی شده را تغییر میدهد. این تابع متغیر اصلی را تغییر نمیدهد و در نتیجه مقدار 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 باعث نوشتن کدهای مؤثر، قابل نگهداری و مقیاسپذیر میشود.