CodeBlanks Logo Icon CodeBlanks

Özet - Namespace'ler

PHP kursu · İleri seviye · Ders 33/92

namespace, use, alias ve PSR-4'le modüler bir kütüphane yapısı kurarsın.

Özet - Namespace'ler

Bu grupta namespace ile kodu paketlemeyi, use ile içe aktarmayı, as ile takma ad vermeyi, global namespace'i ve çok seviyeli yapıyı öğrendin. Son olarak PSR-4 otomatik yükleyici yazdın.

Şimdi bunları birleştirip modüler bir kütüphane iskeleti kuracaksın: sınıfları kendi namespace'lerinde tanımlayıp autoloader ile otomatik yükleteceksin.

Modüler kütüphane iskeleti

PSR-4 uyumlu bir kütüphanede her sınıf kendi dosyasında yaşar. App\Services\AccountService sınıfı src/Services/AccountService.php dosyasında tanımlanır; çağıran taraf use App\Services\AccountService; ile içe aktarır ve kısa adıyla kullanır.

Autoloader doğru dosyayı otomatik olarak yükler. Böylece manuel require gerekmez; proje büyüdükçe bu düzen bakımı önemli ölçüde kolaylaştırır.

Uygulama Çok seviyeli namespace ve use ile sınıf kullan

İki namespace'i süslü parantezli sözdizimiyle tanımla. App\Services içinde AccountService sınıfı ve owner() metodu olsun ("Ayşe" döndürsün). App\Repository içinde App\Services\AccountService sınıfını use ile içe aktar; UserRepository sınıfının static find(int $id): AccountService metodu new AccountService() döndürsün. $user = UserRepository::find(42) ile örneği al, owner() çıktısını ve __NAMESPACE__ yazdır.

Örnek çözümü göster
AccountService { return new AccountService(); } } ekle. $user = UserRepository::find(42); echo $user->owner() . "\n"; echo __NAMESPACE__ . "\n"; çağır.
Örnek çözüm:
<?php

namespace App\Services {
    class AccountService {
        public function owner(): string {
            return "Ayşe";
        }
    }
}

namespace App\Repository {
    use App\Services\AccountService;

    class UserRepository {
        public static function find(int $id): AccountService {
            return new AccountService();
        }
    }

    $user = UserRepository::find(42);
    echo $user->owner() . "\n";
    echo __NAMESPACE__ . "\n";
}

Uygulama PSR-4 autoloader ile çoklu sınıf yolları

Bir classToFile(string $class): string fonksiyonu yaz: App\ prefix'ini çıkarsın, kalan \'ları /'ya çevirsin, başına src/ ekleyip sonuna .php koysun. spl_autoload_register ile kaydet. Hem App\Models\User hem App\Services\AccountService için dosya yollarını 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"; ve echo classToFile("App\\Services\\AccountService") . "\n"; ile yolları yazdır.
Örnek çözüm:
<?php

// classToFile fonksiyonu tanımla (App\ → src/)
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 ve App\Services\AccountService için yolu yazdır
echo classToFile("App\\Models\\User") . "\n";
echo classToFile("App\\Services\\AccountService") . "\n";

Kendini test et

  1. Bir sınıfı içe aktaran anahtar kelime hangisidir?

    • use
    • import
    • include
    • require
    Cevabı göster

    use — Doğru. use anahtar kelimesi sınıfı içe aktarır.

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