دیروز در حال گشت و گذار توی کدهای لاراول بودم که به تابع queueable برخوردم. اگه با این تابع آشنایی داشته باشید احتمالا میدونید که کارش اینه که listener ها رو به صورت queueable دربیاره. جالب اینجاست که این اولین باری بود که میدیدم یک تابع، تحت لوای namespace تعریف شده بود.
سورس کدها رو که نگاه بندازی متوجه میشی که queueable در نیم اسپیس illuminate\Events قرار گرفته. به این صورت:
<?php
// source:: src/Illuminate/Events/functions.php
namespace Illuminate\Events;
use Closure;
if (! function_exists('Illuminate\Events\queueable')) {
/**
* Create a new queued Closure event listener.
*
* @param \Closure $closure
* @return \Illuminate\Events\QueuedClosure
*/
function queueable(Closure $closure)
{
return new QueuedClosure($closure);
}
}
همونطور که می بینید این فایل فقط شامل یک تابع queueable میشه که تحت نیم اسپیس Illuminate\Events قرار گرفته. و چون با namespace قرار گرفته پس میتونی با استفاده از use function در هرجای دیگه ای اون رو ایمپورت و ازش استفاده کنی. به این صورت:
use function Illuminate\Events\queueable
برای زمان هایی که صرفا بخاطر یک تابع نمیخوای یک کلاس مجزا بسازی ولی با این حال میخوای اون رو تحت یک namespace نگه داری این روش خیلی به کارت میاد. چون درست مثل همین تابع queueable خیلی راحت میتونی اون رو ایمپورت کنی.
نظرت درمورد استفاده از این روش چیه؟ تا به حال ازش استفاده کردی؟ توی قسمت نظرات برام بنویس