Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Sı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.phpApp\Models ad alanında bir Product sınıfı tanımlayın. Bu sınıf public $name ve public $price özelliklerine, her iki değeri de kabul eden ve atayan bir yapıcıya (constructor) ve "[name]: $[price]" döndüren bir getInfo() metoduna sahip olmalıdır.
  • src/Models/Customer.phpApp\Models ad alanında bir Customer sınıfı tanımlayın. Bu sınıf public $name özelliğine, ismi kabul eden ve atayan bir yapıcıya ve "Welcome, [name]!" döndüren bir greet() metoduna sahip olmalıdır.
  • vendor/autoload.php — Composer'ın davranışını taklit eden spl_autoload_register kullanarak basit bir otomatik yükleyici oluşturun. Bu yükleyici, App\ ad alanı önekini src/ 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 .php eklemelidir.
  • index.php — Bu sizin giriş noktası dosyanızdır. Tek bir satırla vendor/autoload.php dosyasındaki otomatik yükleyiciyi dahil edin (require), ardından hem App\Models\Product hem de App\Models\Customer sınıflarını içe aktarmak için use anahtar kelimesini kullanın. İsmi "Laptop" ve fiyatı 999 olan bir Product ile ismi "Alice" olan bir Customer oluşturun. Müşteri üzerinde greet() ve ürün üzerinde getInfo() 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
?>
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