CodeBlanks Logo Icon CodeBlanks

PSR-4 otomatik yükleme

PHP kursu · İleri seviye · Ders 32/92

PSR-4 standardıyla namespace ve dosya yolunu eşleyen autoloader yazmayı öğrenirsin.

PSR-4 nedir?

PSR-4, namespace ile dosya yolunu eşleyen bir otomatik yükleme (autoloading) standardıdır. App\Models\User sınıfı src/Models/User.php dosyasında aranır. Bu sayede her sınıf için ayrı bir require yazmazsın.

spl_autoload_register() ile bir autoloader fonksiyonu kaydedersin. PHP, bulunamayan bir sınıf çağrıldığında bu fonksiyonu çalıştırır; fonksiyon dosyayı yükler ve sınıf kullanıma hazır hale gelir.

PSR-4 eşleme yöntemi

PSR-4'te her \ dizin ayracına çevrilir ve vendor prefix base dizine işaret eder. Örneğin prefix App ve base src/ ise: App\Models\User → src/Models/User.php.

Autoloader şunları yapar: 1) prefix'i çıkar, 2) geri kalan \'ları /'ya çevir, 3) base dizine ekle, 4) .php uzantısını ekle, 5) dosyayı require et.

Uygulama PSR-4 autoloader yaz

Bir classToFile(string $class): string fonksiyonu yaz: App\ prefix'ini çıkarsın, kalan \'ları /'ya çevirsin, başına src/ ekleyip sonuna .php koysun. Sonra spl_autoload_register ile kaydet ve App\Models\User için dosya yolunu yazdır.

Örnek çözümü göster
string { $prefix = "App\\"; $base = "src/"; $relative = str_replace($prefix, "", $class); $relative = str_replace("\\", "/", $relative); return $base . $relative . ".php"; } yaz. spl_autoload_register ile kaydet. echo classToFile("App\\Models\\User") . "\n"; ile yolu yazdır.
Örnek çözüm:
<?php

// PSR-4 yol hesaplama fonksiyonu
function classToFile(string $class): string {
    $prefix = "App\\";
    $base = "src/";
    $relative = str_replace($prefix, "", $class);
    $relative = str_replace("\\", "/", $relative);
    return $base . $relative . ".php";
}

// spl_autoload_register ile kaydet
spl_autoload_register(function ($class) {
    $file = classToFile($class);
    require $file;
});

// App\Models\User için dosya yolunu yazdır
echo classToFile("App\\Models\\User") . "\n";

Kendini test et

  1. spl_autoload_register ne yapar?

    • Sınıfı bellekten siler
    • Veritabanı bağlantısı açar
    • Bir autoload fonksiyonu kaydeder
    • Hata fırlatır
    Cevabı göster

    Bir autoload fonksiyonu kaydeder — Doğru. spl_autoload_register bir autoload fonksiyonu kaydeder.

  2. PSR-4 kavramlarını eşleştir

    App\Models\User
    src/Models/User.php
    spl_autoload_register
    Autoloader kaydeder
    \
    Dizin ayracına çevrilir
    vendor prefix
    App gibi kök ad
  3. str_replace çağrısını tamamla

    <?php
    $replacements = ["App\\" => "", "\\" => "/"];
    $class = "App\\Models\\User";
    $relative = ____(array_keys($replacements), array_values($replacements), $class);
    echo $relative;
    
    Cevabı göster
    <?php
    $replacements = ["App\\" => "", "\\" => "/"];
    $class = "App\\Models\\User";
    $relative = str_replace(array_keys($replacements), array_values($replacements), $class);
    echo $relative;
    

İleri seviye bölümündeki tüm dersler