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 (autoloader) yazmak işe yarar, ancak gerçek PHP projeleri otomatik yükleme işlemini otomatik olarak yönetmek için Composer kullanır. Composer, projenizin yapılandırmasını okur ve PSR-4 standartlarını takip eden optimize edilmiş bir otomatik yükleyici oluşturur.
Yapılandırma, projenizin kök dizinindeki bir composer.json dosyasında bulunur. Otomatik yükleme (autoloading) kurallarını şu şekilde tanımlayabilirsiniz:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Bu, Composer'a App\ ile başlayan herhangi bir sınıfın src/ dizininden yüklenmesi gerektiğini söyler. Bunu ayarladıktan sonra Composer, vendor/ dizininde otomatik yükleyici dosyalarını oluşturur.
Composer'ın otomatik yükleyicisini kullanmak için giriş dosyanızın en üstüne sadece 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, tüm projeniz için tüm sınıf yükleme işlemlerini halleder. Gerekirse birden fazla ad alanı (namespace) eşlemesi tanımlayabilirsiniz:
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
}
}
}Önemli Nokta: Composer'ın autoloader'ı, manuel dosya dahil etme işlemlerini ortadan kaldırır ve projeniz genelinde tutarlı bir sınıf yüklemesi sağlar. Neredeyse tüm modern PHP uygulamaları ve framework'leri tarafından kullanılan standart yaklaşımdır.
Görev
KolaySınıfları birden fazla dosya arasında düzenlemek için Composer'ın otomatik yükleme (autoloading) yaklaşımını kullanan küçük bir uygulama oluşturalım. Gerçek bir PHP projesinin kodunu PSR-4 ad alanları (namespaces) ve merkezi bir otomatik yükleyici ile nasıl yapılandırdığını simüle edeceksiniz.
Birlikte çalışan dört dosya oluşturacaksınız:
src/Models/Product.php—App\Modelsad alanında birProductsınıfı tanımlayın. Bu sınıfpublic $namevepublic $priceözelliklerine, her iki değeri de kabul eden ve atayan bir yapıcıya (constructor) ve"[name]: $[price]"döndüren birgetInfo()metoduna sahip olmalıdır.src/Models/Customer.php—App\Modelsad alanında birCustomersınıfı tanımlayın. Bu sınıfpublic $nameözelliğine, ismi kabul eden ve atayan bir yapıcıya ve"Welcome, [name]!"döndüren birgreet()metoduna sahip olmalıdır.vendor/autoload.php— Composer'ın davranışını taklit edenspl_autoload_registerkullanarak basit bir otomatik yükleyici oluşturun. Bu yükleyici,App\ad alanı önekinisrc/diziniyle eşlemeli, ad alanı ayırıcılarını dizin ayırıcılarına dönüştürmeli ve doğru dosyayı yüklemek için sonuna.phpeklemelidir.index.php— Bu sizin giriş noktası dosyanızdır. Tek bir satırlavendor/autoload.phpdosyasındaki otomatik yükleyiciyi dahil edin (require), ardından hemApp\Models\Producthem deApp\Models\Customersınıflarını içe aktarmak içinuseanahtar kelimesini kullanın. İsmi"Laptop"ve fiyatı999olan birProductile ismi"Alice"olan birCustomeroluşturun. Müşteri üzerindegreet()ve ürün üzerindegetInfo()metodlarını çağırmanın sonucunu (her biri kendi satırında olacak şekilde) yazdırın.
Buradaki temel kavram, index.php dosyanızın otomatik yükleyiciyi yüklemek için yalnızca bir require ifadesine ihtiyaç duymasıdır; bundan sonra, tüm sınıflar siz onları kullandığınızda otomatik olarak yüklenir. Modern PHP framework'leri ve uygulamaları Composer ile tam olarak bu şekilde çalışır.
Kopya kağıdı
Composer, bir composer.json yapılandırma dosyasını okuyarak ve PSR-4 standartlarını takip eden optimize edilmiş bir otomatik yükleyici (autoloader) oluşturarak sınıf yüklemeyi otomatikleştirir.
Otomatik yükleme kurallarını composer.json dosyasında tanımlayın:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Bu, App\ ad alanını (namespace) src/ dizinine eşler. Composer, otomatik yükleyici dosyalarını bir vendor/ dizini içinde oluşturur.
Composer'ın otomatik yükleyicisini tek bir require ifadesiyle kullanın:
<?php
require 'vendor/autoload.php';
use App\Models\User;
use App\Services\Logger;
$user = new User("Alice");
$logger = new Logger();
Gerekirse birden fazla ad alanı eşlemesi tanımlayın:
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
}
}
}Composer'ın otomatik yükleyicisi, manuel dosya dahil etme (include) işlemlerini ortadan kaldırır ve modern PHP uygulamalarında standart yaklaşımdır.
Kendin dene
<?php
// TODO: vendor/autoload.php dosyasındaki autoloader'ı dahil edin (require)
// TODO: App\Models\Product sınıfını içe aktarmak için 'use' anahtar kelimesini kullanın
// TODO: App\Models\Customer sınıfını içe aktarmak için 'use' anahtar kelimesini kullanın
// TODO: Adı "Laptop" ve fiyatı 999 olan bir Product (Ürün) oluşturun
// TODO: Adı "Alice" olan bir Customer (Müşteri) oluşturun
// TODO: Müşterinin greet() metodunun sonucunu yazdırın
// TODO: Ürünün getInfo() metodunun sonucunu yazdırın
?>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 KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarı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ıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi