تابع در php
توابع در زبان php کدهایی هستند که یک بار خاص رو انجام میدن . علاوه بر وجود توابع آماده بسیار زیاد میتونیم خودمون هم توابع مورد نظرمون رو بسیازیم .
برای ساخت تابع به شکل زیر عمل میکنیم :
function functionName($first_parameter, $second_parameter) { // code }
برای فراخوانی توابع از شکل زیر استفاده میکنیم :
functionName($first_parameter,$second_parameter);
نکات :
۱- میتوان برای پارامترهای توابع مقدار پیش فرض تعیین کرد. پارامترهایی که مقادیر پیش فرض دارند آخر سر میان یعنی :
function functionName($first_parameter, $second_parameter , $param = "abc") { // code }
نحوه ارسال آرگومان ها به توابع دو شکل دارد : ۱- با مقدار ۲- با ارجاع . تفاوت این دو در اینه که در روش ارجاع با تغییر مقدار اون در بدنهی تابع، مقدار اون در بیرون از تابع نیز تغییر میکنه. در ارجاع قبل از $
یک &
قرار میدیم . مثلا :
function multiplyBy2AndChange(&$number) { /// }
توابع بدون نام: مشابه توابع عادی هستند با این تفاوت که آنها اسمی ندارند و میتونیم اونارو را داخل متغیرها ذخیره کنیم.
۱-توابع فلشی (arrow functions): از کلیدواژهی fn و برای تعیین خروجی از عملگر => استفاده میشه . بیشتر برای توابعی که پیچیدگی خاصی ندارند کاربرد داره . برای بخش خروجی هم از عبارت return
استفاده نمیشه.
$value = fn($param) => (return_expression);
۲-توابع عادی بدون نام ( Closure یا Lambda ) : مثل توابع عادی هستند فقط اسم ندارند و نتیجشون رو هم داخل یک متغیر ذخیره میکنیم . بر خلاف توابع عادی قرار دادن ; تو این نوع توابع اجباریه .
$value = function ($param) { return $param < 0; };
فراخوانی توابع بدون نام مشابه فراخوانی یک متغیره، با این تفاوت که به اون پارامتر هم میدیم. مثلا :
$result = $value(12);
دسترسی به متغیرهای بیرون تابع
در زبان PHP کد درون توابع به عنوان یک اسکوپ (scope) ایزوله در نظر گرفته میشه و دسترسی به متغیرهای خارج از تابع به صورت عادی امکانپذیر نیست. .متغیرهای بیرون تابع global scope و متغیرهای درون یک تابع local scope محسوب میشن.
برای ارجاع یک متغیر از بیرون تابع به درون:
۱- استفاده از use مثل :
function($param1, $param2, ...) use ($var1, $var2, ...) { ... }
در توابع فلشی بدون استفاده از use دسترسی به متغیرهای بیرون تابع ممکنه و در توابع معمولی، استفاده از این عبارت ممکن نیست.
۲- استفاده از کلیدواژهی global:
$value = 1; function fun($str) { global $value; return value * str; }