در برنامهنویسی معمولاً بخشهایی از کد وجود دارند که لازم است چندین بار در قسمتهای مختلف برنامه اجرا شوند. اگر برای هر بار استفاده، همان کد را دوباره بنویسیم، برنامه طولانی، پیچیده و سخت برای نگهداری خواهد شد.
اینجاست که Function یا تابع در PHP اهمیت پیدا میکند.
تابع به ما اجازه میدهد یک مجموعه دستور را در یک واحد مشخص قرار دهیم و هر زمان که نیاز داشتیم آن را اجرا کنیم.
برای مثال به جای اینکه منطق محاسبه قیمت نهایی یک محصول را چندین بار در برنامه بنویسیم، میتوانیم آن را داخل یک تابع قرار دهیم:
function calculateTotal($price, $quantity)
{
return $price * $quantity;
}
سپس هر جا که نیاز داشتیم:
$total = calculateTotal(100000, 3);
echo $total;
در این آموزش با مفهوم تابع در PHP از پایه آشنا میشویم و سپس موضوعاتی مانند پارامترها، آرگومانها، return، Type Declaration، پارامتر پیشفرض، تابع ناشناس، Closure، Arrow Function، Callback و Scope را بررسی میکنیم.
# تابع در PHP چیست؟
Function یک بلوک از کد است که برای انجام یک وظیفه مشخص ایجاد میشود.
یک تابع میتواند:
- ورودی دریافت کند.
- روی دادهها پردازش انجام دهد.
- یک مقدار برگرداند.
- چندین بار در برنامه استفاده شود.
یک تابع ساده در PHP:
function sayHello()
{
echo "Hello World";
}
برای اجرای آن:
sayHello();
خروجی:
Hello World
# چرا از Function در PHP استفاده میکنیم؟
استفاده از تابع مزایای زیادی دارد.
1. جلوگیری از تکرار کد
فرض کنید چندین بار نیاز داریم دو عدد را با هم جمع کنیم.
بدون تابع ممکن است کدهای تکراری ایجاد کنیم.
با تابع:
function add($a, $b)
{
return $a + $b;
}
حالا:
echo add(10, 20);
echo add(50, 100);
echo add(5, 7);
2. افزایش خوانایی کد
کدی مانند:
$total = calculateOrderTotal($items);
بسیار خواناتر از این است که منطق محاسبه سفارش را همانجا داخل کد نوشته باشیم.
3. استفاده مجدد از Logic
یک تابع را میتوان در قسمتهای مختلف برنامه استفاده کرد.
4. سادهتر شدن نگهداری پروژه
اگر منطق یک عملیات تغییر کند، در بسیاری از موارد فقط کافی است Function مربوط به آن را تغییر دهیم.
# ساختار تابع در PHP
ساختار کلی یک Function به شکل زیر است:
function functionName()
{
// code
}
مثلاً:
function sayHello()
{
echo "سلام";
}
نام تابع:
sayHello
است.
برای اجرای تابع:
sayHello();
# نامگذاری Function در PHP
نام تابع باید با یک حرف یا _ شروع شود و نمیتواند با عدد شروع شود.
مثلاً:
function calculatePrice()
{
// ...
}
یا:
function _calculatePrice()
{
// ...
}
اما نامهایی مانند:
function 123calculate()
{
// ...
}
معتبر نیستند.
در پروژههای حرفهای بهتر است نام Function بیانگر کاری باشد که تابع انجام میدهد.
مثلاً:
calculateTotal()
بهتر از نام مبهمی مانند:
doSomething()
است.
# فراخوانی تابع در PHP
بعد از تعریف Function، برای اجرای آن کافی است نام تابع را همراه با () بنویسیم:
function sayHello()
{
echo "Hello";
}
sayHello();
تابع میتواند چندین بار فراخوانی شود:
sayHello();
sayHello();
sayHello();
# پارامتر در PHP چیست؟
گاهی یک تابع برای انجام کار خود به اطلاعات ورودی نیاز دارد.
برای این کار از Parameter استفاده میکنیم.
مثلاً:
function sayHello($name)
{
echo "سلام " . $name;
}
حالا:
sayHello("علی");
خروجی:
سلام علی
در این مثال:
$name
یک Parameter است.
# آرگومان در PHP چیست؟
هنگامی که تابع را فراخوانی میکنیم و مقدار واقعی را به آن میدهیم، به آن مقدار Argument گفته میشود.
مثلاً:
function sayHello($name)
{
echo "سلام " . $name;
}
sayHello("علی");
در اینجا:
$name
پارامتر و:
"علی"
آرگومان است.
# چند پارامتر در Function
یک Function میتواند چند Parameter داشته باشد:
function add($a, $b)
{
return $a + $b;
}
فراخوانی:
$result = add(10, 20);
echo $result;
خروجی:
30
# Return در PHP چیست؟
return برای برگرداندن یک مقدار از Function استفاده میشود.
مثلاً:
function add($a, $b)
{
return $a + $b;
}
سپس:
$result = add(10, 20);
echo $result;
مقدار 30 از تابع برگردانده شده و داخل $result قرار گرفته است.
# تفاوت echo و return در Function
این دو مفهوم را نباید با هم اشتباه گرفت.
echo
مقدار را مستقیماً خروجی میدهد:
function add($a, $b)
{
echo $a + $b;
}
return
مقدار را از Function برمیگرداند:
function add($a, $b)
{
return $a + $b;
}
با return میتوان مقدار را ذخیره یا در عملیات دیگری استفاده کرد:
$total = add(10, 20);
$final = $total * 2;
به همین دلیل در بسیاری از Functionهای منطقی، استفاده از return انعطاف بیشتری ایجاد میکند.
# Function بدون Return
یک Function الزاماً نیاز به return ندارد.
مثلاً:
function showMessage()
{
echo "عملیات با موفقیت انجام شد.";
}
این تابع فقط یک عملیات انجام میدهد و مقدار خاصی برنمیگرداند.
# Return چند مقدار در PHP
یک Function مستقیماً فقط یک مقدار را Return میکند، اما آن مقدار میتواند یک Array یا Object باشد.
مثلاً:
function getUser()
{
return [
"name" => "Ali",
"age" => 25
];
}
سپس:
$user = getUser();
echo $user["name"];
# پارامتر پیشفرض در PHP
گاهی میخواهیم اگر کاربر مقداری برای یک Parameter ارسال نکرد، یک مقدار پیشفرض استفاده شود.
مثلاً:
function sayHello($name = "کاربر")
{
echo "سلام " . $name;
}
حالا:
sayHello();
خروجی:
سلام کاربر
اما:
sayHello("سعید");
خروجی:
سلام سعید
# ترتیب پارامترهای پیشفرض
وقتی Function چند Parameter دارد، باید در تعریف آن به ترتیب پارامترها توجه کرد.
مثلاً:
function createUser($name, $role = "user")
{
// ...
}
در اینجا $name اجباری و $role دارای مقدار پیشفرض است.
فراخوانی:
createUser("Ali");
در این حالت Role به صورت پیشفرض user خواهد بود.
# Type Declaration در Function
در PHP میتوان نوع Parameter را نیز مشخص کرد.
مثلاً:
function add(int $a, int $b)
{
return $a + $b;
}
در اینجا انتظار داریم $a و $b از نوع Integer باشند.
مثال:
echo add(10, 20);
# مشخص کردن نوع Return
میتوان نوع مقدار برگشتی Function را نیز مشخص کرد.
مثلاً:
function add(int $a, int $b): int
{
return $a + $b;
}
قسمت:
: int
مشخص میکند تابع باید مقدار Integer برگرداند.
# انواع Return Type در PHP
بسته به نیاز Function میتوان از Typeهای مختلف استفاده کرد.
مثلاً:
function getName(): string
{
return "Ali";
}
یا:
function isActive(): bool
{
return true;
}
یا:
function getPrice(): float
{
return 125.50;
}
# nullable در Function
اگر Function بتواند مقدار null نیز برگرداند، میتوان از Nullable Type استفاده کرد:
function findUser(int $id): ?array
{
// ...
}
علامت ? نشان میدهد Return Value میتواند Type مشخصشده یا null باشد.
# Union Type در Function
در PHP مدرن میتوان چند Type را نیز مشخص کرد.
مثلاً:
function formatId(int|string $id): string
{
return (string) $id;
}
در این مثال $id میتواند int یا string باشد.
# Passing Arguments by Value
بهصورت معمول، PHP آرگومانها را به شکل Value به Function میدهد.
مثلاً:
function increase($number)
{
$number++;
}
$value = 10;
increase($value);
echo $value;
در این حالت تغییر داخل Function الزاماً مقدار Variable بیرونی را تغییر نمیدهد.
# Passing Arguments by Reference
با استفاده از & میتوان Parameter را به صورت Reference دریافت کرد.
مثلاً:
function increase(&$number)
{
$number++;
}
$value = 10;
increase($value);
echo $value;
در این حالت مقدار $value تغییر میکند.
استفاده از Reference باید آگاهانه انجام شود؛ زیرا باعث میشود Function بتواند Variable بیرونی را مستقیماً تغییر دهد.
# Variadic Function در PHP
گاهی تعداد Argumentهایی که به Function ارسال میشوند از قبل مشخص نیست.
در این شرایط میتوان از Variadic Parameter استفاده کرد.
مثلاً:
function sum(...$numbers)
{
return array_sum($numbers);
}
حالا:
echo sum(10, 20, 30);
یا:
echo sum(1, 2, 3, 4, 5);
در هر دو حالت تعداد Argumentها میتواند متفاوت باشد.
# تابع ناشناس در PHP چیست؟
Anonymous Function تابعی است که نام مشخصی ندارد.
مثلاً:
$greet = function ($name) {
return "سلام " . $name;
};
حالا:
echo $greet("علی");
در اینجا Function داخل Variable قرار گرفته است.
# کاربرد تابع ناشناس
Anonymous Functionها معمولاً زمانی کاربرد دارند که بخواهیم یک رفتار را به عنوان مقدار به Function دیگری ارسال کنیم.
مثلاً:
$numbers = [1, 2, 3, 4];
$result = array_map(function ($number) {
return $number * 2;
}, $numbers);
نتیجه:
[2, 4, 6, 8]
# Closure در PHP چیست؟
Closure نوعی Function ناشناس است که میتواند متغیرهای محدوده بیرونی را با استفاده از use به Scope خود وارد کند.
مثلاً:
$tax = 10;
$calculate = function ($price) use ($tax) {
return $price + ($price * $tax / 100);
};
echo $calculate(100);
در این مثال Closure به $tax دسترسی پیدا کرده است.
# Arrow Function در PHP
برای Functionهای بسیار کوتاه میتوان از Arrow Function استفاده کرد.
مثلاً:
$double = fn($number) => $number * 2;
سپس:
echo $double(5);
خروجی:
10
Arrow Functionها Syntax کوتاهتری نسبت به Anonymous Function دارند.
# مثال Arrow Function با array_map
$numbers = [1, 2, 3, 4];
$result = array_map(
fn($number) => $number * 2,
$numbers
);
نتیجه:
[2, 4, 6, 8]
# Callback در PHP چیست؟
Callback به تابعی گفته میشود که بتوان آن را به عنوان Argument به Function دیگری ارسال کرد.
مثلاً:
function processNumber($number, $callback)
{
return $callback($number);
}
حالا:
$result = processNumber(10, function ($number) {
return $number * 2;
});
echo $result;
خروجی:
20
Callbackها در PHP و Frameworkهایی مانند Laravel کاربرد زیادی دارند.
# Scope در Functionهای PHP
Scope مشخص میکند یک Variable در چه محدودهای قابل دسترسی است.
مثلاً:
$name = "Ali";
function showName()
{
echo $name;
}
در این مثال $name به صورت مستقیم داخل Function در دسترس نیست، چون Variable بیرون از Scope تابع تعریف شده است.
# استفاده از global در Function
PHP امکان استفاده از global را برای دسترسی به Variableهای Global فراهم میکند:
$name = "Ali";
function showName()
{
global $name;
echo $name;
}
اگرچه این روش ممکن است در بعضی موارد کار کند، در پروژههای بزرگ معمولاً بهتر است وابستگیهای Function را به شکل صریح از طریق Parameter یا معماری مناسب مدیریت کنیم.
# استفاده از Parameter به جای global
بهتر است در بسیاری از موارد مقدار موردنیاز را به Function ارسال کنیم:
function showName($name)
{
echo $name;
}
$name = "Ali";
showName($name);
این روش Function را مستقلتر و قابل تستتر میکند.
# توابع Built-in در PHP
PHP تعداد زیادی Function داخلی یا Built-in دارد.
مثلاً:
strlen()
برای محاسبه طول String.
یا:
count()
برای شمارش عناصر Array.
یا:
strtolower()
برای تبدیل حروف به حالت کوچک.
مثلاً:
$name = "HELLO";
echo strtolower($name);
خروجی:
hello
# تفاوت Built-in Function و User-defined Function
دو دسته کلی Function داریم.
Built-in Function
توسط PHP یا Extensionهای آن ارائه شدهاند.
مثلاً:
strlen()
count()
array_map()
User-defined Function
توسط برنامهنویس ایجاد میشود.
مثلاً:
function calculateTotal($price, $quantity)
{
return $price * $quantity;
}
# مثال واقعی: تابع محاسبه قیمت محصول
فرض کنید در یک فروشگاه اینترنتی میخواهیم قیمت نهایی محصول را محاسبه کنیم:
function calculateProductTotal(float $price, int $quantity): float
{
return $price * $quantity;
}
استفاده:
$total = calculateProductTotal(250000, 3);
echo $total;
نتیجه:
750000
# مثال واقعی: محاسبه تخفیف
function calculateDiscount(float $price, float $discount): float
{
return $price - ($price * $discount / 100);
}
استفاده:
$finalPrice = calculateDiscount(1000000, 15);
echo $finalPrice;
خروجی:
850000
# مثال واقعی: اعتبارسنجی ایمیل
میتوانیم منطق اعتبارسنجی را در یک Function قرار دهیم:
function isValidEmail(string $email): bool
{
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
سپس:
if (isValidEmail("test@example.com")) {
echo "ایمیل معتبر است.";
} else {
echo "ایمیل نامعتبر است.";
}
این روش باعث میشود Logic مربوط به اعتبارسنجی در یک مکان مشخص قرار داشته باشد.
# مثال واقعی: ساخت نام کامل کاربر
function getFullName(string $firstName, string $lastName): string
{
return trim($firstName . " " . $lastName);
}
استفاده:
$name = getFullName("Ali", "Ahmadi");
echo $name;
# Functionهای کوچک بهتر هستند یا بزرگ؟
بهتر است هر Function تا حد امکان یک مسئولیت مشخص داشته باشد.
مثلاً:
calculateOrderTotal()
بهتر است مسئول محاسبه مجموع سفارش باشد، نه اینکه همزمان:
- کاربر را احراز هویت کند.
- سفارش را ذخیره کند.
- ایمیل ارسال کند.
- موجودی را کاهش دهد.
- گزارش تولید کند.
تقسیم مسئولیتها باعث میشود کد قابل فهمتر، تستپذیرتر و قابل نگهداریتر باشد.
این موضوع بعدها در یادگیری SOLID و Single Responsibility Principle اهمیت زیادی پیدا میکند.
# Function و DRY
یکی از اصول مهم برنامهنویسی، DRY یا Don't Repeat Yourself است.
اگر یک Logic را بارها و بارها در پروژه تکرار کنیم، تغییر آن Logic دشوار خواهد شد.
مثلاً به جای:
$total1 = $price1 * $quantity1;
$total2 = $price2 * $quantity2;
$total3 = $price3 * $quantity3;
میتوانیم از Function استفاده کنیم:
function calculateTotal($price, $quantity)
{
return $price * $quantity;
}
و سپس:
$total1 = calculateTotal($price1, $quantity1);
$total2 = calculateTotal($price2, $quantity2);
$total3 = calculateTotal($price3, $quantity3);
# Functionها در Laravel چه کاربردی دارند؟
یادگیری Function در PHP مستقیماً به یادگیری Laravel کمک میکند.
در Laravel مرتب با مفاهیمی مواجه میشوید که بر پایه Functionها و Callbackها ساخته شدهاند.
مثلاً:
$users->map(function ($user) {
return $user->name;
});
یا:
Route::get('/users', function () {
return view('users');
});
همچنین در Laravel با:
- Closure
- Callback
- Dependency Injection
- Serviceها
- Controllerها
- Eventها
- Jobها
- Queueها
سروکار خواهید داشت.
بنابراین تسلط بر Function یکی از پایههای مهم ورود به Laravel است.
# اشتباهات رایج در استفاده از Function
1. Functionهای بسیار بزرگ
تابعی که صدها خط کد دارد معمولاً نیاز به بازطراحی دارد.
2. نامگذاری نامناسب
نامی مانند:
function doIt()
اطلاعات زیادی درباره عملکرد تابع ارائه نمیکند.
نامی مانند:
calculateOrderTotal()
خواناتر است.
3. استفاده بیش از حد از global
وابستگی مستقیم به Global Variableها میتواند تست و نگهداری کد را دشوار کند.
4. استفاده نادرست از Reference
استفاده از:
&$value
باید آگاهانه باشد؛ زیرا Function میتواند مقدار Variable اصلی را تغییر دهد.
5. ترکیب چند مسئولیت در یک Function
بهتر است Functionها تا حد امکان یک مسئولیت مشخص داشته باشند.
# بهترین روش نامگذاری Function در PHP
برای نام Function بهتر است از نامی استفاده کنید که دقیقاً کاری را که Function انجام میدهد مشخص کند.
مثلاً:
calculateTotal()
findUser()
sendEmail()
validatePassword()
createOrder()
این روش باعث میشود کد حتی بدون مطالعه جزئیات Function قابل درک باشد.
# نکات مهم برای نوشتن Functionهای حرفهای
هنگام طراحی Function به این موارد توجه کنید:
- Function یک وظیفه مشخص داشته باشد.
- نام آن واضح و معنادار باشد.
- ورودیهای موردنیاز را به صورت Parameter دریافت کند.
- در صورت نیاز Return Type مشخص شود.
- از Global Variable تا حد امکان دوری شود.
- Functionهای بسیار بزرگ به Functionهای کوچکتر تقسیم شوند.
- Logicهای تکراری به Function منتقل شوند.
- ورودیهای کاربر قبل از استفاده Validate شوند.
- رفتار Function در شرایط خطا مشخص باشد.
- Functionها تا حد امکان قابل تست باشند.
# جمعبندی
توابع در PHP یکی از مهمترین مفاهیم برنامهنویسی هستند.
با Function میتوانیم یک Logic مشخص را در قالب یک واحد مستقل قرار دهیم و هر زمان که نیاز داشتیم آن را فراخوانی کنیم.
در این مقاله با مفاهیم مهمی مانند:
- Function
- Parameter
- Argument
- Return
- Default Parameter
- Type Declaration
- Return Type
- Nullable Type
- Union Type
- Variadic Function
- Anonymous Function
- Closure
- Arrow Function
- Callback
- Scope
آشنا شدیم.
در پروژههای واقعی، استفاده صحیح از Functionها باعث کاهش کدهای تکراری، افزایش خوانایی، سادهتر شدن تست و نگهداری پروژه میشود.
اگر مسیر یادگیری PHP را دنبال میکنید، بعد از یادگیری Functionها بهتر است سراغ آرایهها در PHP بروید؛ زیرا Arrayها یکی از مهمترین ساختارهای دادهای PHP هستند و در کنار Functionها تقریباً در تمام پروژههای PHP استفاده میشوند.
# سوالات متداول درباره توابع در PHP
تابع در PHP چیست؟
Function در PHP یک بلوک از کد است که برای انجام یک وظیفه مشخص ایجاد میشود و میتوان آن را چندین بار فراخوانی کرد.
چگونه در PHP تابع بسازیم؟
برای ساخت Function از کلمه کلیدی function استفاده میشود:
function sayHello()
{
echo "Hello";
}
Parameter و Argument چه تفاوتی دارند؟
Parameter در زمان تعریف Function مشخص میشود، در حالی که Argument مقداری است که هنگام فراخوانی Function به آن ارسال میکنیم.
return در PHP چه کاری انجام میدهد؟
return یک مقدار را از Function به محل فراخوانی برمیگرداند.
تفاوت echo و return چیست؟
echo مقدار را خروجی میدهد، اما return مقدار را از Function برمیگرداند تا بتوان در ادامه برنامه از آن استفاده کرد.
Function ناشناس در PHP چیست؟
Anonymous Function تابعی است که نام مشخصی ندارد و میتواند داخل Variable قرار بگیرد یا به عنوان Callback استفاده شود.
Closure در PHP چیست؟
Closure نوعی Function است که میتواند متغیرهای Scope بیرونی را با مکانیزمهایی مانند use در اختیار داشته باشد.
Arrow Function در PHP چیست؟
Arrow Function یک Syntax کوتاه برای نوشتن Functionهای ساده است.
مثلاً:
$double = fn($number) => $number * 2;
Callback در PHP چیست؟
Callback تابعی است که میتواند به عنوان Argument به Function دیگری ارسال شود.
آیا Function میتواند چند مقدار برگرداند؟
Function مستقیماً یک Return Value دارد، اما این مقدار میتواند Array یا Object باشد و چندین داده را در خود نگهداری کند.
# مقالات مرتبط
برای ادامه مسیر یادگیری PHP، پیشنهاد میکنیم این مقالات را مطالعه کنید:
- PHP چیست و چه کاربردی دارد؟
- آموزش PHP از صفر
- ساختار Syntax در PHP
- متغیرها در PHP
- انواع داده در PHP
- شرطها در PHP
- حلقهها در PHP
- آرایهها در PHP
- رشتهها در PHP
- کار با تاریخ و زمان در PHP
- کار با JSON در PHP
- کار با فایل در PHP
- Exception در PHP
- Namespace در PHP
- Composer چیست؟
- OOP در PHP
# مسیر پیشنهادی یادگیری PHP
PHP چیست؟
↓
آموزش PHP از صفر
↓
Syntax در PHP
↓
متغیرها در PHP
↓
انواع داده در PHP
↓
شرطها در PHP
↓
حلقهها در PHP
↓
توابع در PHP ← این مقاله
↓
آرایهها در PHP
↓
رشتهها در PHP
↓
تاریخ و زمان در PHP
↓
JSON در PHP
↓
کار با فایل
↓
Exception
↓
Namespace
↓
Composer
↓
OOP





