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.
Görev
KolayAynı 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:Vehiclead alanında,public $brandözelliğine sahip birCarsınıfı tanımlayın. Yapıcı, marka adını kabul edip bunu ayarlamalıdır."Vehicle: [brand]"döndüren birdescribe()yöntemi ekleyin.Animal/Car.php:Animalad alanında birCarsınıfı tanımlayın (bu, Car adlı bir kedi!). Sınıfınpublic $ageözelliği olmalıdır. Yapıcı yaşı kabul edip bunu ayarlar."Cat named Car, age: [age]"döndüren birdescribe()yöntemi ekleyin.main.php: Her iki sınıf dosyasınırequire_oncekullanarak dahil edin. Tam ad alanı yollarını kullanarak her ad alanından bir nesne oluşturun, ardından her nesne üzerindedescribe()ç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 birVehicle\Car - Yaşı
3olan birAnimal\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)
?>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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi