PSR-4 otomatik yükleme
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
-
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.
-
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
-
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;