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.
Namespace, PHP dosyasının en üstünde (açılış etiketinden hemen sonra) tanımlanmalıdır.
App/User.php
index.php (Farklı bir alandan çağırma)
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:
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:
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.
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ı
| Özellik | Namespace Öncesi | Namespace Sonrası |
|---|---|---|
| Sınıf Çakışması | Yüksek Risk (Aynı isimli 2 sınıf hata verir) | Yok (İsim alanları benzersizdir) |
| Dosya Yönetimi | Manuel require/include kalabalığı | Tek bir autoload ile otomatik yönetim |
| Okunabilirlik | Class_Ismi_Cok_Uzun_Olur | Temiz 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.