Barangkali sering kita dengar namun jarang dipakai, Lamda dan Closure adalah Anonymous Function ( fungsi tak bernama  ) yang disematkan setelah PHP versi 5.3 

Mungkin bagi yang masih baru belajar PHP belum masuk atau belum banyak memakai Lambda & Closure, tapi sebaiknya harus secepatnya karena ternyata ini agak mendasar, penting dan banyak digunakan dalam duni 'koding' sehari-hari. Apalagi jika kita pakai Framework seperti Laravel,Symfoni pasti ini ketemu terus.

1. Lambda

Lamda adalah Anonymous Function yang bisa di assign kedalam sebuah Variable dan juga bisa di Pass ke Function lain sebagai argumen (parameter)

Contoh :

Jika di fungsi reguler, biasanya kita koding seperti ini

function german(){

return "German menang !!!!";
}
//function call
echo german();

maka pakai Lambda

//define function
$hola = function (){
return "German menang !!!!";
};
//function call
echo $hola();

misal lagi

$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};
$greet('World');
Lambda sebagai argumen/parameter untuk fungsi lain

// pass Lambda to function
function tekno ($message){
  $message();
}
 
//function call
tekno(function(){
  return "Hello world";
});

Lambda berguna saat kita ingin membuat Variable Global tapi value dari variable nya harus kita olah dulu seperti yang kita mau makanya dikerjakan dalam fungsi

2. Closure

Sama seperti lambda, tapi closure bisa mengakses variable diluar Scope nya

dalam contoh biasa

$nama ="Ganjar";
function printme(){
echo $nama;
}
printme(); 

variable $nama diatas tidak bisa diakses didalam fungsi printme , errornya :
Notice: Undefined variable: nama in /opt/lampp/htdocs/test_php/index.php on line 5

bagaimana supaya bisa ? karena seringkali kita menemukan kasus serupa. Jawabannya ya Closure  

$nama ="Ganjar";

$akses = function() use($nama){
  echo $nama;
}; //function call
$akses();

Jika nanti sering ketemu dengan Function Callback, Closure akan sangat membantu.

Contoh jika kita pakai Laravel

Jika kita ingin layout bisa diakes di route

View::name('layouts.default', 'default');
$layout = View::of('default');
Route::get('/home',function() use($layout){
    $layout->title = 'Welcome Home - Teknosains.com';
    return $layout->nest('content','home');
});

atau ketika kita pakai Slim Framework

<?php
require 'vendor/autoload.php';
$app = new \Slim\Slim();
function getJSON(\Slim\Slim $app,$param){
    
    $app->contentType('application/json');
    return json_encode(array('coba'=>$param));
}

$app->get('/test/:name', function ($name) use($app) {
   
   print_r(getJSON($app,$name));
});
$app->run();

Sekian semoga bermanfaat,