آموزش closure در php
یکی از مباحثی که در بیشتر زبان های برنامه نویسی کاربرد دارد، مبحث closure است. در php نیز بحث closure را داریم و بیشتر فریمورک های محبوب php به کرات از این ویژگی استفاده می کنند.
ساختار closure در php
closure یک تابع ناشناخته است که می تواند به متغیری در خارج از سطح دسترسی خودش، دسترسی داشته باشد.
همانطور که می دانیم، توابع ناشناخته بدون استفاده از کیورد use، امکان استفاده از متغیرهای با سطح دسترسی خارج از خود را ندارند:
$x = 1; $z = function(){ echo $x; }; $z(); //output: Undefined variable $x
متغیر z یک تابع ناشناخته است. اکنون با اضافه کردن یک use به آن، آن را تبدیل به یک closure می کنیم:
$x = 1; $z = function() use ($x){ echo $x; }; $z(); //output: 1
تفاوت Anonymous function با closure
چنانچه در بالا مشاهده کردیم، در دستور اول، تابع ما یک تابع ناشناخته بود و نمی توانست متغیرهای خارج از سطح دسترسی خودش را داشته باشد. ولی در دستور دوم با اضافه کردن use، آن را تبدیل به یک closure کردیم.
پس تفاوت ایندو در این است که در closure ها می توانیم به متغیرهای خارجی دسترسی داشته باشیم، ولی در Anonymous function ای که closure نباشد، نمی توانیم.
در واقع هر closue، یک Anonymous function هست ولی هر Anonymous function، یک closure نیست. clousre یک Anonymous function پیشرفته تر می باشد.
Arrow Functions حالت کوتاه شده closure ها
نوعی از توابع که به arrow function ها معروف هستند، در واقع حالت ساده شده closure ها می باشند.
در arrow function ها بدون استفاده از کیورد use، می توانیم به متغیرهای خارج دسترسی داشته باشیم:
$x = 2; $plus = fn() => $x+=2; echo $plus(); //output: 4
پس با تعریفی که در بالا در مورد closure ها گفتیم، arrow function ها یک closure محسوب می شوند. چون می توانند به متغیرهای خارج دسترسی داشته باشند.