دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / توابع (PHP Functions)

توابع (PHP Functions)

30 دقیقه Article

توابع: آجرهایِ سازنده‌یِ برنامه 🧱👷‍♂️

تابع (Function) قطعه کدی است که یک نام دارد و هر زمان به آن نیاز باشد، صدا زده می‌شود. قانونِ طلاییِ برنامه‌نویسی DRY (تکرار نکن!) با توابع محقق می‌شود.

تعریف و فراخوانی:

{code_block('function sayHello($name) {\n return "سلام " . $name;\n}\necho sayHello("ایران");')}

پارامترهایِ هوشمند:

در PHP می‌توانید برایِ پارامترها مقدارِ پیش‌فرض (Default Value) بگذارید تا اگر کاربر مقداری نداد، برنامه خطا ندهد:

{code_block('function setHeight($h = 50) { ... }')}

تایپ کستینگ در ورودی و خروجی (PHP 7+) 🛡️

برایِ امنیتِ بیشتر، می‌توانید نوعِ داده‌یِ ورودی و خروجی را مشخص کنید:

{code_block('function sum(int $a, int $b): int {\n return $a + $b;\n}')}
ارسال از طریقِ رفرنس (Passing by Reference): به طورِ معمول، توابع یک کپی از متغیر را می‌گیرند. اگر از علامتِ & استفاده کنید، تابع مستقیماً رویِ متغیرِ اصلیِ بیرون از تابع تاثیر می‌گذارد.

تعدادِ متغیرِ پارامترها (Variadic Functions):

با استفاده از ... می‌توانید هر تعداد ورودی که خواستید به تابع بدهید (مثل آرایه دریافت می‌شود).

{code_block('function myFamily(...$names) { ... }')}
توابعِ Anonymous (بی‌نام): این توابع که به آن‌ها Closure هم می‌گویند، متغیرهایی هستند که محتوایِ آن‌ها کد است. این‌ها در کدهایِ مدرن و فریم‌ورک‌هایی مثل لاراول بیداد می‌کنند!
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی منطق و پرفورمنس در PHP 🐘⚙️

در سطوحِ حرفه‌ای، اجرایِ کد فقط کافی نیست؛ "چگونگیِ" اجرا و بهینه‌سازیِ آن تفاوتِ بینِ یک کدِ معمولی و یک معماریِ مقیاس‌پذیر را رقم می‌زند.

۱. بهینه‌سازیِ محاسبات با BCMath

در سیستم‌هایِ مالی و بانکی، دقتِ اعشاریِ معمولی (Float) به دلیلِ خطاهایِ گرد کردنِ باینری قابلِ اعتماد نیست. برایِ این کار، PHP افزونه‌ای به نام BCMath دارد که محاسبات را با دقتِ نامحدود و به صورتِ رشته‌ای انجام می‌دهد تا حتی یک ریال هم در محاسبات جابجا نشود.

۲. ساختارِ HashTable در آرایه‌ها

آرایه‌ها در PHP برخلافِ بسیاری از زبان‌ها، در واقع Ordered Hash Maps هستند. هر زمان که شما عضوی به آرایه اضافه می‌کنید، PHP یک سیستمِ Bucket و Hash را در پشتِ صحنه مدیریت می‌کند تا سرعتِ دسترسی به داده‌ها در حالتِ میانگین O(1) باقی بماند.

۳. مفهومِ Closures و کپسوله‌سازی

توابعِ بی‌نام (Anonymous) در PHP فقط برایِ کارهایِ موقت نیستند. با استفاده از کلمه کلیدی use، می‌توانید متغیرهایی را از اسکوپِ بیرونی به داخلِ تابع وارد کنید و یک Closure بسازید که پایه و اساسِ بسیاری از الگوهایِ طراحی مدرن است.

نکته طلایی: همیشه برایِ شرط‌هایِ پیچیده از Early Return استفاده کنید. به جایِ تودرتو کردنِ ifها، ابتدا حالت‌هایِ خطا را چک کرده و از تابع خارج شوید تا خواناییِ کد به حداکثر برسد.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تابعی برایِ ضرب Medium
سوال تمرین

تابعی به نام multiply بنویسید که دو عدد دریافت کرده و حاصل‌ضربِ آن‌ها را return کند. سپس حاصل ضرب 5 در 4 را چاپ کنید.

پاسخ تمرین
PHP
<?php
function multiply($a, $b) {
  return $a * $b;
}
echo multiply(5, 4);
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.