Namespace Nedir? İsim Alanları ve Autoload Kullanımı

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Namespace kavramını bilgisayarınızdaki klasör yapısına benzetebilirsiniz. "Resimler" klasöründe "deneme.jpg" olabilir, aynı isimli başka bir dosya için farklı bir klasör açmanız gerekir. PHP'de de aynı isimli sınıfları farklı "isim alanları" altında toplayarak çakışmaları önleriz.

1. Namespace Tanımlama ve Kullanma​


Namespace, PHP dosyasının en üstünde (açılış etiketinden hemen sonra) tanımlanmalıdır.

App/User.php
PHP:
<?php
namespace App;

class Profile {
public function getInfo() {
return "Kullanıcı profili yüklendi.";
}
}
?>

index.php (Farklı bir alandan çağırma)
PHP:
<?php
require_once 'App/User.php';

// 1. Yöntem: Tam adıyla çağırma
$user = new \App\Profile();

// 2. Yöntem: "use" anahtar kelimesiyle dahil etme
use App\Profile;
$user = new Profile();
?>

2. Autoload (Otomatik Yükleme) Nedir?​


Projenizde 50 tane sınıf olduğunda, her dosyanın başına 50 tane require_once yazamazsınız. spl_autoload_register() fonksiyonu, siz bir sınıfı çağırdığınız anda (eğer o dosya yüklü değilse) devreye girer ve dosyayı otomatik bulup yükler.

Basit Bir Autoload Örneği:
PHP:
spl_autoload_register(function ($sinif_ismi) {
// Namespace'teki ters eğik çizgileri sistem yoluna uygun hale getirir
$yol = str_replace('\', '/', $sinif_ismi) . '.php';

if (file_exists($yol)) {
    require_once $yol;
}

});

// Artık require yapmaya gerek yok!
$blog = new \App\Models\Blog(); // App/Models/Blog.php otomatik yüklendi.

Namespace ve Autoload Avantajları​


ÖzellikNamespace ÖncesiNamespace Sonrası
Sınıf ÇakışmasıYüksek Risk (Aynı isimli 2 sınıf hata verir)Yok (İsim alanları benzersizdir)
Dosya YönetimiManuel require/include kalabalığıTek bir autoload ile otomatik yönetim
OkunabilirlikClass_Ismi_Cok_Uzun_OlurTemiz ve hiyerarşik yapı

3. Modern Standart: Composer ve PSR-4​


Günümüzde profesyonel projelerde kendi autoload fonksiyonumuzu yazmak yerine Composer kullanırız. composer.json dosyasında şu tanımlama yapılır:

JSON:
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
[CODE]

Bu tanımlama şu anlama gelir: App ile başlayan tüm sınıflar src/ klasörü altındadır. Composer sizin için en optimize autoload dosyasını üretir.

[HEADING=2]4. "Use" ve "As" (Takma Ad) Kullanımı[/HEADING]

Eğer iki farklı namespace altında aynı isimli sınıfı kullanmanız gerekirse as anahtar kelimesiyle birine takma ad verebilirsiniz.

[CODE=php]
use App\Models\Image as AppImage;
use External\Library\Image as LibImage;

$img1 = new AppImage();
$img2 = new LibImage();

Sonuç​


Namespace ve Autoload kullanmak, kodunuzun sadece çalışmasını değil, "yönetilebilir" olmasını sağlar. Modern PHP frameworkleri (Laravel, Symfony vb.) tamamen bu yapı üzerine inşa edilmiştir. Bir projeye başlarken mutlaka isim alanlarını kurgulayın ve otomatik yükleme standartlarına (PSR-4) uyun.
 
Geri
Üst