First-class callable syntax
... ile closure oluşturan first-class callable sözdizimini öğrenirsin.
First-class callable syntax (...)
PHP 8.1 ile gelen first-class callable syntax, herhangi bir çağrılabiliri (callable) Closure'a çevirir: $fn = strlen(...).
Üç nokta (...) yer tutucusu, argümanların buraya geleceğini belirtir. Elde edilen Closure, orijinal yöntemle aynı davranır.
Eski yöntemlere göre daha okunaklıdır: Closure::fromCallable('strlen') yerine strlen(...) yazarsın. Yöntem referansları için $obj->method(...) ve Foo::method(...) da geçerlidir.
Attributes (#[Attribute])
PHP 8.0 ile gelen attributes, sınıf, yöntem ve özelliklere üst veri (metadata) ekler. Sözdizimi #[Route("/users")] şeklinde; köşeli parantez içinde yazılır.
Bir üst veri sınıfı tanımlamak için onu #[Attribute] ile işaretlersin. Yöntem parametreleriyle veri taşıyabilirsin.
Üst veriler kod tarafından Reflection API ile okunur; çerçeveler (framework) rota, doğrulama (validation) ve bağımlılık enjeksiyonu için kullanır.
Uygulama Route attribute ve first-class callable
Bir Route üst veri sınıfı tanımla: #[Attribute] ile işaretli, string $path parametreli kurucusu olsun.
list_users fonksiyonuna #[Route("/users")] üst verisini ekle. Sonra list_users(...) ile bir Closure al ve çağır; çıktı kullanıcılar olmalı.
Örnek çözümü göster
#[Attribute]
class Route {
public function __construct(public string $path) {}
}
#[Route("/users")]
function list_users(): void {
echo "kullanıcılar\n";
}
$fn = list_users(...);
$fn();
Kendini test et
-
First-class callable yazımı
$upper = ____; echo $upper("hi");Cevabı göster
$upper = strtoupper(...); echo $upper("hi"); -
strlen(...) ne döndürür?
- strlen'in sonucunu
- strlen için bir Closure
- strlen tanımını
- bir hata fırlatır
Cevabı göster
strlen için bir Closure — Doğru. strlen(...) bir Closure döner; bu Closure'a argüman geçtiğinde strlen çalışır.
-
Callable ve attribute kavramları
- ...
- first-class callable yer tutucusu
- Closure
- çağrılabilir nesne
- #[Route]
- üst veri bildirimi
- Reflection
- üst veriyi okur