Menu
Coddy logo textTech

Namespace’lere Giriş

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 10 / 91.

PHP projelerin büyüdükçe birçok sınıf oluşturacaksın. İki sınıf aynı ada sahip olduğunda ne olur?

Örneğin, blogunuz için bir User sınıfınız ve mağazanız için başka bir User sınıfınız olabilir. Ad alanları, sınıfları mantıksal gruplar hâlinde düzenleyerek bu sorunu çözer.

Bir namespace, sınıflarınız için bir klasör gibidir. Bunu PHP dosyanızın en üstünde namespace anahtar sözcüğünü kullanarak bildirirsiniz:

<?php
namespace Blog;

class User {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

Artık farklı bir ad alanında başka bir User sınıfınız olabilir:

<?php
namespace Shop;

class User {
    public $email;
    
    public function __construct($email) {
        $this->email = $email;
    }
}

Bir ad alanına sahip sınıfı kullanmak için, ters eğik çizgi kullanarak ona tam yoluyla başvurursunuz:

<?php
$blogUser = new \Blog\User("Alice");
$shopUser = new \Shop\User("alice@example.com");

echo $blogUser->name . "\n";
echo $shopUser->email . "\n";

Çıktı:

Alice
alice@example.com

Ters eğik çizgi \, eğik çizgilerin bir dosya yolundaki klasörleri ayırmasına benzer şekilde ad alanı düzeylerini ayırır. Daha derin bir organizasyon için App\Models\Blog gibi iç içe ad alanları da oluşturabilirsiniz.

Önemli Nokta: Ad alanları, adlandırma çakışmalarını önler ve kodunuzu düzenli tutar. Dosyanızdaki diğer tüm kodlardan önce ( declare ifadeleri hariç) her zaman ad alanını bildirin.

challenge icon

Görev

Kolay

Aynı ada sahip sınıflar arasındaki adlandırma çakışmalarını önlemek için ad alanlarını kullanarak küçük bir uygulama düzenleyelim.

Hem araçları hem de hayvanları yöneten bir sistem oluşturduğunuzu düşünün. Her iki alanda da Car adlı bir varlık var: biri gerçek bir otomobili temsil ederken diğeri "Car" adlı evcil bir kediyi temsil ediyor (evet, bazı insanlar kedilerine böyle isimler veriyor!).

Üç dosya oluşturacaksınız:

  • Vehicle/Car.php: Vehicle ad alanında, public $brand özelliğine sahip bir Car sınıfı tanımlayın. Yapıcı, marka adını kabul edip bunu ayarlamalıdır. "Vehicle: [brand]" döndüren bir describe() yöntemi ekleyin.
  • Animal/Car.php: Animal ad alanında bir Car sınıfı tanımlayın (bu, Car adlı bir kedi!). Sınıfın public $age özelliği olmalıdır. Yapıcı yaşı kabul edip bunu ayarlar. "Cat named Car, age: [age]" döndüren bir describe() yöntemi ekleyin.
  • main.php: Her iki sınıf dosyasını require_once kullanarak dahil edin. Tam ad alanı yollarını kullanarak her ad alanından bir nesne oluşturun, ardından her nesne üzerinde describe() çağrısının sonucunu yazdırın (her biri kendi satırında).

main.php içinde şunları oluşturun:

  • Markası "Toyota" olan bir Vehicle\Car
  • Yaşı 3 olan bir Animal\Car

Nesneler oluştururken, ad alanına sahip sınıflara tam yollarıyla başvurmak için ters eğik çizgiyi \ kullanmayı unutmayın.

Kendin dene

<?php
// Sınıf dosyalarını dahil et
require_once 'Vehicle/Car.php';
require_once 'Animal/Car.php';

// TODO: "Toyota" markasıyla bir Vehicle\Car nesnesi oluştur
// Tam ad alanı yolunu ters eğik çizgi ile kullanmayı unutma

// TODO: Yaşı 3 olan bir Animal\Car nesnesi oluştur
// Tam ad alanı yolunu ters eğik çizgi ile kullanmayı unutma

// TODO: Her nesne için describe() sonucunu yazdır (her biri kendi satırında)

?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online PHP derleyicisi