CodeBlanks Logo Icon CodeBlanks

First-class callable syntax

PHP kursu · Uzman · Ders 41/54

... 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

  1. First-class callable yazımı

    $upper = ____;
    echo $upper("hi");
    
    Cevabı göster
    $upper = strtoupper(...);
    echo $upper("hi");
    
  2. 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.

  3. Callable ve attribute kavramları

    ...
    first-class callable yer tutucusu
    Closure
    çağrılabilir nesne
    #[Route]
    üst veri bildirimi
    Reflection
    üst veriyi okur

Uzman bölümündeki tüm dersler