Composer Autoloader
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 91.
Kendi otomatik yükleyicinizi yazmak işe yarar, ancak gerçek PHP projeleri otomatik yüklemeyi yönetmek için Composer kullanır. Composer, projenizin yapılandırmasını okur ve PSR-4 standartlarını izleyen optimize edilmiş bir otomatik yükleyici oluşturur.
Yapılandırma, projenizin kök dizinindeki composer.json dosyasında bulunur. Otomatik yükleme kurallarını şu şekilde tanımlarsınız:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Bu, App\ ile başlayan herhangi bir sınıfın src/ dizininden yüklenmesi gerektiğini Composer’a bildirir. Bu kurulumu yaptıktan sonra Composer, otomatik yükleyici dosyalarını vendor/ dizininde oluşturur.
Composer'ın otomatik yükleyicisini kullanmak için giriş dosyanızın en üstüne yalnızca bir satır eklemeniz yeterlidir:
<?php
require 'vendor/autoload.php';
use App\Models\User;
use App\Services\Logger;
$user = new User("Alice");
$logger = new Logger();
Bu tek require ifadesi, projenizin tamamındaki tüm sınıf yükleme işlemlerini gerçekleştirir. Gerekirse birden fazla ad alanı eşlemesi tanımlayabilirsiniz:
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
}
}
}Önemli Nokta: Composer'ın otomatik yükleyicisi, dosyaların manuel olarak dahil edilmesi gereksinimini ortadan kaldırır ve projeniz genelinde tutarlı sınıf yükleme işlemi sağlar. Bu, neredeyse tüm modern PHP uygulamaları ve framework'ler tarafından kullanılan standart yaklaşımdır.
Görev
KolayBirden çok dosyadaki sınıfları düzenlemek için Composer'ın otomatik yükleme yaklaşımını kullanan küçük bir uygulama oluşturalım. Gerçek bir PHP projesinin kodunu PSR-4 ad alanları ve merkezi bir otomatik yükleyiciyle nasıl yapılandırdığını simüle edeceksin.
Birlikte çalışan dört dosya oluşturacaksın:
src/Models/Product.php:App\Modelsad alanında birProductsınıfı tanımla. Bu sınıftapublic $namevepublic $priceözellikleri, her iki değeri kabul edip ayarlayan bir yapıcı ve"[name]: $[price]"değerini döndüren birgetInfo()yöntemi bulunmalıdır.src/Models/Customer.php:App\Modelsad alanında birCustomersınıfı tanımla. Bu sınıfta birpublic $nameözelliği, adı kabul edip ayarlayan bir yapıcı ve"Welcome, [name]!"değerini döndüren birgreet()yöntemi bulunmalıdır.vendor/autoload.php: Composer'ın davranışını taklit eden basit bir otomatik yükleyiciyispl_autoload_registerkullanarak oluştur.App\ad alanı ön ekinisrc/dizinine eşlemeli, ad alanı ayraçlarını dizin ayraçlarına dönüştürmeli ve doğru dosyayı yüklemek için sonuna.phpeklemelidir.index.php: Bu, giriş noktası dosyandır. Tek bir satırlavendor/autoload.phpdosyasındaki otomatik yükleyiciyi require et; ardından hemApp\Models\Producthem deApp\Models\Customersınıflarını içe aktarmak içinuseanahtar sözcüğünü kullan. Adı"Laptop"ve fiyatı999olan birProductile adı"Alice"olan birCustomeroluştur. Müşteri üzerindegreet()ve ürün üzerindegetInfo()çağrılarının sonuçlarını yazdır (her biri kendi satırında).
Buradaki temel kavram, index.php dosyanın otomatik yükleyiciyi yüklemek için yalnızca bir require ifadesine ihtiyaç duymasıdır; bundan sonra, kullandığın tüm sınıflar otomatik olarak yüklenir. Modern PHP framework'leri ve uygulamaları Composer ile tam olarak böyle çalışır.
Kendin dene
<?php
// TODO: vendor/autoload.php dosyasından autoloader'ı require et
// TODO: App\Models\Product'ı içe aktarmak için 'use' anahtar kelimesini kullan
// TODO: App\Models\Customer'ı içe aktarmak için 'use' anahtar kelimesini kullan
// TODO: "Laptop" adında ve 999 fiyatında bir Product oluştur
// TODO: "Alice" adında bir Customer oluştur
// TODO: Müşterinin greet() sonucunu yazdır
// TODO: Ürünün getInfo() sonucunu yazdır
?>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