PHP'de bir closure, oluşturulduğu kapsamdaki değişkenlere, kapsam kapatıldıktan sonra bile erişebilen anonim bir fonksiyondur. İçinde use anahtar kelimesini belirtmeniz gerekir.
Kapatmalar, fonksiyon kodunu ve oluşturuldukları kapsamı kapsülleyen nesnelerdir. PHP 7 ile, bir nesne kapsamını bir kapatmaya bağlamak ve onu çağırmak için yeni bir closure::call() yöntemi tanıtıldı.
Kapatma Sınıfındaki Yöntemler
Closure sınıfı call() yöntemi de dahil olmak üzere aşağıdaki yöntemlere sahiptir:final class Closure {
/* Methods */
private __construct()
public static bind(Closure $closure, ?object $newThis, object|string|null $newScope = "static"): ?Closure
public bindTo(?object $newThis, object|string|null $newScope = "static"): ?Closure
public call(object $newThis, mixed ...$args): mixed
public static fromCallable(callable $callback): Closure
}
call () metodu Closure sınıfının statik bir metodudur. bind() veya bindTo() metotlarına kısayol olarak tanıtılmıştır.
bind() yöntemi, belirli bir bağlı nesne ve sınıf kapsamına sahip bir kapanışı çoğaltır; bindTo() yöntemi ise yeni bir bağlı nesne ve sınıf kapsamına sahip kapanışı çoğaltır.
call() yönteminin imzası şu şekildedir:
public Closure::call(object $newThis, mixed ...$args): mixed
call() metodu, kapanışı geçici olarak newThis'e bağlar ve verilen herhangi bir parametreyle çağırır.
PHP 7'den önceki sürümlerde bindTo() yöntemi aşağıdaki gibi kullanılabilir:
PHP:
<?php
class A {
private $x = 1;
}
// Define a closure Pre PHP 7 code
$getValue = function() {
return $this->x;
};
// Bind a clousure
$value = $getValue->bindTo(new A, 'A');
print($value());
?>
Program, bir kapanış nesnesi olan $getValue'yu A sınıfının nesnesine bağlar ve onun özel değişkeni $x'in değerini yazdırır – bu değer 1'dir.
PHP 7 ile bağlama, aşağıda gösterildiği gibi call() metodu ile gerçekleştirilir:
PHP:
<?php
class A {
private $x = 1;
}
// PHP 7+ code, Define
$value = function() {
return $this->x;
};
print($value->call(new A));
?>
