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

توابع کال‌بک (PHP Callback Functions)

30 دقیقه Article

Callbackها: توابعی در خدمتِ توابعِ دیگر 📞🔄

کال‌بک (Callback) به تابعی گفته می‌شود که به عنوانِ یک پارامتر به تابعِ دیگری پاس داده می‌شود. این مفهوم پایه‌یِ برنامه‌نویسیِ تابعی (Functional) در PHP است.

نحوه استفاده در آرایه‌ها

بسیاری از توابعِ آرایه در PHP نیاز به یک کال‌بک دارند. مثلاً برایِ تغییرِ همه‌یِ اعضایِ یک لیست:

{code_block('function my_format($item) { return $item . "!"; }\n$new_list = array_map("my_format", ["apple", "banana"]);')}

توابعِ Anonymous و Arrow Functions:

در PHP مدرن، نیازی نیست همیشه تابع را جایِ دیگری تعریف کنید:

{code_block('$new = array_map(fn($n) => $n * 2, [1, 2, 3]);')}
Callable: در PHP یک نوعِ داده به نام callable داریم که تضمین می‌کند پارامترِ ورودی حتماً یک تابعِ قابلِ اجراست.

استفاده در فیلتر کردن آرایه:

{code_block('$evens = array_filter($numbers, function($n) { return $n % 2 == 0; });')}
کاربرد در فریم‌ورک‌ها: بخشِ زیادی از قدرتِ فریم‌ورک‌هایی مثل لاراول بر اساسِ کال‌بک‌هایی است که شما در مسیرها (Routes) یا مدل‌ها تعریف می‌کنید.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

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

درکِ عمیقِ مفاهیمِ پیشرفته، تفاوتِ بینِ یک کدنویسِ معمولی و یک معمارِ نرم‌افزار را رقم می‌زند.

۱. بهینه‌سازی I/O و بافرینگ

در هنگامِ کار با فایل‌هایِ حجیم، هرگز کلِ فایل را به یکباره در حافظه (RAM) بارگذاری نکنید. استفاده از Streams و توابعِ fopen/fgets به شما اجازه می‌دهد فایل را خط به خط پردازش کنید که باعث می‌شود مصرفِ حافظه همیشه در کمترین سطحِ ممکن باقی بماند.

۲. امنیتِ نشست‌ها (Session Security)

مهم‌ترین خطر در مدیریتِ کاربران، Session Hijacking است. همیشه بعد از لاگین کردنِ کاربر، از session_regenerate_id(true) استفاده کنید تا شناسه‌یِ نشستِ قبلی باطل شود. همچنین فلگ‌هایِ HttpOnly و Secure را برای کوکی‌ها فعال کنید.

۳. استانداردهایِ مدرن و Autoloading

در پروژه‌هایِ بزرگ، استفاده از include دستی فاجعه‌بار است. استانداردِ PSR-4 و استفاده از Composer به شما اجازه می‌دهد کلاس‌ها را فقط در زمانی که واقعاً نیاز هستند بارگذاری کنید (Lazy Loading)، که سرعتِ لود شدنِ کلِ اپلیکیشن را به شدت بالا می‌برد.

نکته استراتژیک: به جایِ استفاده از توابعِ سنتی، سعی کنید به سمتِ Object-Oriented Programming (OOP) حرکت کنید. اکثرِ کتابخانه‌هایِ پیشرفته‌یِ PHP مثل DateTime و PDO از این پارادایم استفاده می‌کنند.

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

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

استفاده از array_map Medium
سوال تمرین

با استفاده از یک تابعِ بی‌نام (Anonymous) و array_map، تمامِ اعدادِ آرایه‌یِ [1, 2, 3] را در 2 ضرب کنید.

پاسخ تمرین
PHP
<?php
$arr = [1, 2, 3];
$result = array_map(function($n) { return $n * 2; }, $arr);
print_r($result);
?>

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

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