توابع Callback
توابع Callback در PHP — anonymous functions، closures، arrow functions و استفاده در array_map، usort
Callback چیست؟
Callback تابعی است که بهعنوان آرگومان به تابع دیگر داده میشود. بسیاری از توابع PHP از callback استفاده میکنند.
روش ۱: نام تابع بهعنوان callback
<?php
function myCallback($item) {
return strtoupper($item);
}
$fruits = ["apple", "banana", "cherry"];
$result = array_map("myCallback", $fruits);
// ["APPLE", "BANANA", "CHERRY"]
?>
روش ۲: Anonymous Function (تابع بینام)
<?php
$result = array_map(function($item) {
return strtoupper($item);
}, $fruits);
?>
روش ۳: Arrow Function (PHP 7.4+)
<?php
$result = array_map(fn($item) => strtoupper($item), $fruits);
?>
Anonymous Functions (Closure)
توابع بینام متغیرهایی هستند که تابع در آنها ذخیره میشود:
<?php
$greet = function($name) {
return "سلام $name!";
};
echo $greet("علی"); // سلام علی!
?>
use — دسترسی به متغیر بیرونی
توابع بینام بهصورت پیشفرض به متغیرهای بیرونی دسترسی ندارند. باید با use آنها را وارد کنید:
<?php
$prefix = "آقای/خانم";
$greet = function($name) use ($prefix) {
return "سلام $prefix $name!";
};
echo $greet("محمدی"); // سلام آقای/خانم محمدی!
?>
Arrow Functions و متغیر بیرونی
Arrow functions بهصورت خودکار به متغیرهای بیرونی دسترسی دارند:
<?php
$multiplier = 3;
$multiply = fn($n) => $n * $multiplier;
echo $multiply(5); // 15
// تغییر متغیر بیرونی
$multiplier = 10;
echo $multiply(5); // 15 (مقدار زمان تعریف استفاده میشود)
?>
استفاده در usort
<?php
$users = [
["name" => "علی", "age" => 25],
["name" => "مریم", "age" => 22],
["name" => "حسن", "age" => 30],
];
// مرتبسازی بر اساس سن
usort($users, function($a, $b) {
return $a["age"] - $b["age"];
});
// با arrow function
usort($users, fn($a, $b) => $a["age"] - $b["age"]);
?>
call_user_func — فراخوانی callback
<?php
function process($callback, $data) {
return $callback($data);
}
// با نام تابع
echo process("strtoupper", "hello");
// با anonymous
echo process(function($s) { return strrev($s); }, "hello");
// با arrow
echo process(fn($s) => ucfirst($s), "hello");
?>
is_callable — بررسی قابلفراخوانی بودن
<?php
$func = "strtoupper";
if (is_callable($func)) {
echo $func("hello"); // HELLO
}
?>
مثال کاربردی — سیستم فیلتر
<?php
function filterItems($items, $criteria) {
return array_filter($items, $criteria);
}
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$evens = filterItems($numbers, fn($n) => $n % 2 === 0);
$gt5 = filterItems($numbers, fn($n) => $n > 5);
$primes = filterItems($numbers, function($n) {
if ($n < 2) return false;
for ($i = 2; $i <= sqrt($n); $i++) {
if ($n % $i === 0) return false;
}
return true;
});
?>
این مبحث بخشی از دوره آموزش کامل PHP است.