Composer ve Autoload Nedir?

Bu günlüğün ilk yazısı olacak sanırım. Bu nedenle biraz heyecanlıyım. Yeni günlüğümün ilk yazısı ne olsun diye düşündüm ve ilerleyen yazılarda çokça adından bahsedeceğim Composer ile ilgili bir yazı yazmak çok mantıklı geldi.

PHP ile bir proje üzerinde çalışırken geliştiriciler üçüncü parti bir çok kütüphaneden faydalanır. Fakat proje ne kadar karmaşık veya büyük olursa bu üçüncü parti uygulamaları yüklemek, güncellemek veya takip etmekte o kadar karmaşık bir hal alabiliyor. Bu durumu idare edebilmek ve vakitten tasarruf etmek için Composer kullanıyoruz. Unutmayın vakit nakit demektir.

Lafı fazla dolandırmadan Composer ve Autoload nedir ve nasıl kullanılır açıklamaya çalışayım.

Composer Nedir?

Composer için şu tanım yapılabilir; PHP’de bağımlılık yöneticisi. Aslında dependency manager fakat doğrudan Türkçeye çevirdiğimizde bağımlılık yöneticisi ortaya çıkıyor. Bense PHP projelerinizdeki üçüncü parti kütüphane yöneticisi demeyi tercih ediyorum. En güzel ifade edilişi de bu bence.

Kütüphane Yönetiminde Yaşanan Sıkıntılar

PHP projelerde çalışırken Composer kullanmıyorsanız üçüncü parti kütüphaneleri idare ederken bir çok problemle karşılaşma durumunuz var.

İlk olarak, harici kütüphaneleri kullanmak için onları indirip, PHP projenizde bir dizine taşımanız gerekmektedir. Fakat karmaşık bir sistemde bu işlem karmaşık olabilir veya daha sonra neyi nereye taşıdığınızı unutabilirsiniz.

Bunun dışında, bir çok kütüphane başka kütüphanelere bağlı olarak geliştirilmiştir. Bu kütüphaneleri güncellemek içinde zaman ve efor harcamanız gerekecektir çünkü orijinal kütüphaneyi bulmak için arayış içine giriyorsunuz. Örneğin, A kütüphanesinin çalışması için B kütüphanesini indirmeniz gerekiyor, ikisindeki güncelleştirmeleri takip etmek için her seferinde tek tek arayıp güncellemek demek ki, onlarca kütüphaneniz varken bu durum sebep olacağı zaman ve efor gerçekten sinir bozucu olabiliyor.

Şimdi, çok şükür Composer var ki yukarıda bahsettiğim durumların hiç birini yaşamıyoruz.

Composer’ın Faydaları

Composer geliştiricilere çok önemli iki ana fayda sağlamaktadır:

  • Geliştiricilerin harici kütüphanelerini, bu kütüphanelerin sürümlerini ve bunların bağlı olduğu kütüphaneleri composer.json dosyası ile çok rahatlıkla yönetmelerine yardımcı oluyor.
  • PHP projeniz için gerekli olan kütüphaneleri otomatik olarak arayıp yeni sürümlerine güncelleyebiliyor.

Composer Kurulumu

Composer kurulumu için aşağıdaki adımları takip edin:

PHP kurulumunu kontrol edin

İlk olarak PHP’nin kurulu olması gerekiyor. PHP kurulumunu kontrol etmek için terminal ekranında aşağıdaki komutu yazın:

php -v

Windows’da Composer Kurulumu

Windows’da Composer kurulumu çok basit ve hızlıdır. Tek yapmanız gereken Composer-Setup.exe dosyasını indirmek ve sonra çalıştırmaktadır.

Composer, PATH ayarlarınızı kurulumu yaparken otomatik olarak yapacaktır. Bu sayede terminal ekranlarından composer komutunu rahatlıkla kullanabileceksiniz. Fakat, composer komutunu kullandığınızda hata alıyorsanız C:\ProgramData\ComposerSetup\bin değerini PATH olarak elle eklemeniz gerekecektir.

Not: Açık terminalleriniz varsa onları kapatın, kurulum tamamlandıktan sonra tekrar açın. PATH değerleri terminal ilk başlatıldığı anda alınır.

Çevre değişkenleri ile ilgili daha detaylı bilgi için Wikipedia makalesini okuyabilirsiniz veya Google’da araştırma yapabilirsiniz.

CentOS/RHEL/Ubuntu’da Composer Kurulumu

Composer’ı kurmak için terminali açın ve aşağıdaki komutu yazın:

sudo curl -sS https://getcomposer.org/installer | php

Hala terminal açıkken aşağıdaki komutu yazın, bu sayede composer komutunu her yerde kullanabileceksiniz:

mv composer.phar /usr/local/bin/composer

Genel Komutlar

Composer ile çalışırken aşağıdaki komutlara ihtiyaç duyacaksınız:

  • Composer’ın mevcut versiyonunu kontrol et:
composer -v
  • Composer’ı son sürüme güncelle:
composer -selfupdate
  • Composer ön belleğini temizle (Composer’ı kütüphaneleri yeniden ön belleğe almaya zorlar)
composer -selfupdate
  • Kütüphane paketlerini arama:
composer search kutuphane_adi

PHP Projelerinizde Composer Kullanımı

Yeni PHP Projenizde Composer Kurulumu

İlk olarak yapmanız gereken şey composer.json dosyasını oluşturmanızdır. Bu dosya projenizle ilgili Composer’ın bilmesi gerekenleri saklar. Bu dosyayı terminal ekranından da oluşturabilirsiniz. Tek yapmanız gereken proje dizininde aşağıdaki komutu çalıştırmak:

composer init

Daha sonra composer.json dosyasını aşağıdaki gibi deklare etmeniz gerekmektedir:

Package name (/) [admin/my_project]: oralunal/ilkprojem (/*Bu kütüphane adınız*/)

Description []: PHP'de Composer Kullanımı

Author [elightup , n to skip]: oralunal

Minimum Stability []: dev

Package Type (e.g. library, project, metapackage, composer-plugin) []:

License []:

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no

Would you like to define your dev dependencies (require-dev) interactively [yes]? No

Do you confirm generation [yes]? Y

Tamam! composer.json dosyamız aşağıdaki içerikle beraber oluşturuldu:

{

    "name": "oralunal/ilkprojem",

    "description": "PHP'de Composer Kullanımı",

    "authors": [

        {

            "name": "oralunal",

            "email": "oralunal@gmail.com"

        }

    ],

    "minimum-stability": "dev",

    "require": { }

}

Artık Composer ayarlarımız (kütüphane ayarlarımız dahil) composer.json dosyasında saklı tutulacak.

PHP Projelerine Composer ile Kütüphaneleri Entegre Etme

İlk olarak burada arayarak PHP projenizin ihtiyaç duyduğu kütüphaneleri bulmanız gerekiyor. PHP projenizde kullanım ihtiyacı duyduğunuz kütüphaneleri bulduktan sonra bunları iki farklı yöntemle PHP projenize entegre edebilirsiniz:

Yöntem 1: terminal Aracılığıyla

Bir nedenle, phpro/grumphp kütüphanesinin son sürümünü kullanmak istiyorum (kod kalitesini kontrol etmek amacıyla kullanılan bir kütüphanedir). Bu nedenle, terminal ekranına aşağıdaki komutu yazıyorum:

composer require phpro/grumphp

Bu komut ile Composer’a phpro/grumphp kütüphanesini kurmasını söylüyoruz. Bu kütüphane PHP projemizde yeni oluşturulmuş olan vendor dizinine kuruldu.

Ayrıca, vendor/autoload.php dosyası otomatik olarak oluşturuldu. Bu dosya kurduğumuz kütüphaneleri otomatik olarak projemize yüklemimizi sağlayacaktır.

composer.json dosyamıza geri gidip bakalım, aşağıdaki kodun eklendiğini fark edeceksiniz:

"require": {

        "phpro/grumphp": "^1.12.0"

    }

Sürüm belirtmeden kurduğumuz için sizde daha yüksek sürüm yazabilir.

Yukarıda gördüğünüz yeni JSON verisinin açıklaması:

  • phpro/grumphp PHP projemiz için kullandığımız kütüphanedir.
  • 1.12.0 kütüphanenin güncel sürümüdür.

Artık PHP projenizi paylaşmak için veya taşımak için komple vendor dizinini kopyalamak yerine sadece composer.json dosyasını kopyalayabilirsiniz. Hedef sunucuya, bilgisayara vs. composer.json dosyasını taşıdığınız vendor klasörü otomatik olarak gelecektir.

Yöntem 2: composer.json Dosyasına Komut Ekleyerek

Yöntem 1’de anlattığım terminal ekranında komut girmek yerine, composer.json dosyasında require bölümüne aşağıdaki gibi içerik ekleyerek de harici kütüphaneleri ekleyebilirsiniz:

"kutuphane-adi":"^versiyonu"

Örneğin, phpro/grumphp kütüphanesinin 1.0.0 versiyonunu projeme entegre etmek istiyorum. require kısmını aşağıdaki gibi güncelliyorum:

  "require": {
    "phpro/grumphp": "^1.0.0"
  }

Bu güncelleştirmeyi/eklemeyi yaptıktan sonra terminalden composer update komutunu çalıştırmak yeterlidir. Bu komut ile vendor klasörümüz composer.json dosyamızdaki sürümlerle uygun olacak şekilde oluşturulur veya güncellenir.

Bu yöntemin sağladığı en büyük avantaj çok fazla kütüphaneyi tek komutla indirmenizi/güncelleştirmenizi sağlar.

Bu indirdiğiniz üçüncü parti kütüphaneleri PHP projenizin index.php sayfasına include "vendor/autoload.php"; kodu ile rahatlıkla ekleyebilirsiniz.

PHP Projenizden Bir Kütüphaneyi Kaldırma

Daha önce composer kullanarak indirmiş olduğumuz kütüphaneleri (vendor dizinin içinde) kaldırmak için aşağıdaki yöntemleri uygulayabilirsiniz:

Yöntem 1: composer Komutunu Kullanarak

terminal ekranında aşağıdaki komutu girin:

composer remove vendor/package

Bu komutta vendor/package sizin kaldırmak istediğiniz kütüphanenin adıdır. Örneğin ben phpro/grumphp kütüphanesini kaldırmak istiyorum, bunun için aşağıdaki komutu kullanıyorum:

composer remove phpro/grumphp

Yöntem 2: composer.json Dosyasını Güncelleyerek

composer.json dosyasını tekrar açın ve kaldırmak istediğiniz kütüphanenin adını require kısmından kaldırın. Ardından composer update komutunu çalıştırarak işlemi sonlandırın.

Composer Kullanarak Kütüphanelerin Versiyonlarını Belirleme

Bazı sebeplerden dolayı herhangi bir kütüphanenin son sürümünü kullanmamanız gerekebilir. Bu gibi durumlarda Composer üzerinde versiyonları aşağıdaki 6 farklı şekilde tanımlayabiliriz.

Versiyon Aralığı

Bu yöntem >, <, >=, <=, !=, AND, OR gibi karşılaştırma operatörlerini kullanarak versiyonu tanımlar. AND operatörü yerine boşluk veya virgül kullanılabilir. Ayrıca OR operatörü de iki dikey çizgi (||) ile ifade edilebilir.

Örnek vermek gerekirse phpro/grumphp kütüphanesi için 1.0.0 sürümünden yüksek sürümlere izin veriyoruz fakat 1.1.0 sürümüne izin vermiyoruz. Bu senaryo için şu şekilde bir komut kullanıyoruz:

composer require phpro/grumphp ">1.0.0,!=1.1.0"

Açıklaması:

  • phpro/grumphp: kütüphanemizin adı
  • >1.0.0: Composer sadece 1.0.0 sürümünden yüksek sürümleri kurmaya yetkili
  • !=1.1.0: Composer 1.1.0 sürümü hariç bütün sürümleri kurmaya yetkili
  • ,: AND operatörü

Wilcard Versiyonlar

Bu yöntem ile Composer sadece x.x.* aralığındaki versiyonları kurabilir.

Örneğin, composer require phpro/grumphp "0.18.*" komutunu kullanırsam, Composer phpro/grumphp kütüphanesinin 0.18.0 sürümünden yüksek fakat 0.19.0 sürümünden düşük sürümleri kurabilecek. 0.18.1, 0.18.2 gibi.. Versiyon aralığı yöntemiyle de şu şekilde tanımlayabilirdik: ">=0.18.0,<0.19"

Tire Aralığı

Bu yöntem aralığı belirlemek için - operatörünü kullanır. Daha iyi anlamak için aşağıdaki örneği inceleyin.

Composer’ın 0.10 sürümünden sonraki versiyonları indirebilmesini ayrıca 0.19 sürümünün de altında kalmasını istiyorum. Komutumuz da şu şekilde: composer require phpro/grumphp "0.1 - 0.18". Versiyon aralığı yöntemi ile de şöyle ifade edebiliriz: ">=0.10, <0.19".

Tilda Aralığı

Bu yöntem aralığı belirlemek için ~ operatörünü kullanır. Örneğini "~0.18" girerseniz, Composer 0.18.0’dan büyük ama 1.0.0’dan küçük sürümlerle sınırlı kalacaktır. Bunu versiyon aralığı yönteminde şu şekilde ifade edebiliriz: ">0.18, <1.0".

Şapka Aralığı

Bu yöntem ^ operatörünü kullanır ve yanında yazılan versiyondan sonraki bütün versiyonları kapsar (kendisi hariç).

Örneğin, ^0.18.1 girersem Composer 0.18.1’den sonraki bütün versiyonları kurar (0.18.1 hariç).

Dev-Master

Dev-Master yöntemiyle kütüphaneleriniz her zaman en güncel halde olur. Fakat, kütüphanelerin son güncel halleri daha tam anlamıyla tamamlanmamış olabileceğinden çok da sağlık bir yöntem sayılmaz. Farkında olmadığınız açıklarla PHP projenizde istenmeyen durumların yaşanmasına sebep olabilir.

Composer’ın phpro/grumphp kütüphanesini her zaman en güncel ve son sürümde tutmak için şu komutu kullanmanız yeterlidir: composer require phpro/grumphp "dev-master".

Autoload

Autoload Nedir?

Autload, sınıfların yükleme ve kullanma yöntemidir. Autoload kullanarak PHP dosyasının en üstünde bütün sınıf dosyalarını tek tek eklemek yerine tek satırda istediğimiz yerde kullanabileceğimiz sınıfları yükleyebiliriz.

Yukarıda bahsettiğim gibi Composer, kütüphane yönetimini kolay ve hızlı hale getiriyor. Ayrıca, Autoload, Composer’ın kütüphanelerin farklı kütüphanelere olan bağımlılıklarını kolayca yönetmesine yardımcı olan çok kullanışlı bir araçtır.

Autoload Nasıl Çalışıyor?

Autload çalışmasını anlamak için öncelikle PSR-4 standardı hakkında bilgi sahibi olmanız gerekmektedir. Bu kütüphaneler için önerilen kodlama standardıdır.

Aşağıda PSR-4 ile ilgili biraz açıklama bulabilirsiniz:

Klasörlerdeki kodlar, uygun şekilde düzenlenmelidir. Bunu yapmak için geliştiricilerin aşağıdaki yapıya göre sınıflar oluşturması gerekir:

\<NamespaceAdi>(\<AltNamespaceAdlari>)*\<SinifAdi>

Geliştiriciler yukarıdaki yapıya göre bir sınıf oluşturursa, sınıfa şu üç bileşen ile erişilebilir: NameSpace, SubNameSpaces ve SinifAdi.

Açıklaması:

  • NameSpace: Bu dağıtıcının adıdır aslında, başka dağıtıcıların ismiyle karışmayacak bir isim olmasına özen gösterilmesi gerekir.
  • SubNameSpaces: Buna alt dizin diyebiliriz. Kullanılacak sınıfın dizinini SubNameSpaces olarak adlandırabiliriz. Çok kabaca açıklıyorum, kusura bakmayın fakat basit bir örnek ile ne demek istediğimi çok rahat anlayacaksınız. Hazırladığınız kütüphanenizi libs isimli bir klasöre kaydettiniz. Ardından sınıflarınız içinden \dagitici\namespace1\namespace2\cls1 ile cls1 sınıfınızı tanımladınız. Bu şu anlama geliyor, src klasörünün içinde namespace1 klasörü var ve namespace1 klasörünün içinde de namespace2 klasörü var.
  • SinifAdi: Bu oluşturulan sınıfın adıdır. Gereklidir. Son namespace isimli klasörün içinde SinifAdi şeklinde dosya adına sahip olması gerekir (SinifAdı.php).

Yukarıdaki yapıya ihtiyaç duyulduğunda bütün PHP projeleri Autoload kütüphanesi kullanmalıdır. Aynı Autoload mekanizmasını kullanan frameworkler arasında kütüphaneler paylaşılabilir. Günümüzde, bütün popüler frameworkler PSR-4’e göre Autload mekanizması kullanmaktadırlar.

Composer’da aslında bunu yapmaktadır. İndirilen PSR-4 uyumlu kütüphaneleri otomatik olarak yükler.

Örneğin Okul\Sinav namespace ine sahip Sonuclar isimli bir sınıf oluşturmak istiyorum. libs/Sinav/Sonuclar.php isimli bir dosya oluşturup içeriğini aşağıdaki gibi yapıyorum:

<?php
namespace Okul\Sinav;
class Sonuclar {
    function sinavSonuclari()
    {
        // kod
        // kod
        // daha çok kod
    }
}

Oluşturduğumuz dosya adı ve dizin isimleriyle beraber yukarıdaki kodumuz PSR-4 uyumlu oldu. Vakit, Composer’a vendor/autoload.php ile bizim sınıfımızı da entegre etmesi gerektiğini söyleme vaktidir. composer.json dosyasına aşağıdaki gibi bir ilave yapıyoruz:

{
  "autoload": {
    "psr-4": {
      "Okul\\": "libs/"
    }
  }
}

Okul‘un da libs klasörüne işaret ettiğini aslında burada tanımlıyoruz. Geriye bir tek terminal ekranından aşağıdaki komutu çalıştırmak kalıyor:

composer dump-autoload

Artık, vendor/autload.php sizin sınıfınızı da ihtiyaç duyduğunuzda yükleyecek. Aşağıdaki şekillerde Sonuclar sınıfınızı kullanabilirsiniz:

İlk kod:

<?php

$snf = new Okul\Sinav\Sonuclar();

İkinci kod:

<?php

user Okul\Sinav

$snf = new Sonuclar();

Yukarıdaki iki kod aynıdır, sadece syntaxleri farklıdır. Dilediğinizi kullanabilirsiniz.

PSR-4 üzerine belki farklı bir yazı da gelebilir.

Son Kelamlar

Sonuç olarak Autoload ve Compser PHP için olmazsa olmaz araç haline gelmişlerdir. Ayrıca zamandan ve harcanan iş gücünden tasarruf etmenizi sağlayacak veli nimetlerdir. Umarım bu yazı faydalı olmuştur veya olur. Sağlıcakla kalın.

“Composer ve Autoload Nedir?” için bir yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

%d blogcu bunu beğendi: