PHP – Composer İle PSR-4 Proje Oluşturma

1 Haziran 2020 tarihinde Emre Can ÖZTAŞ tarafından paylaşıldı.

PHP ile çalışırken herhangi bir proje yapısı kolaylıkla kurulabilir ve kullanılabilir. Hatta kendiniz için bir proje dizini hazırlayıp kullanabilirsiniz. Zaten çoğu kişinin yaptığı da böyle. Fakat burada şöyle bir sorun var; hazırladığınız proje yapısını sizden sonra gelecek olan kişi veya kişilerin kolaylıkla anlayabilmesi ve devam ettirebilmesi gereklidir. Ya da bir çok yazılımcının başına gelen; ilerleyen zamanlarda kendi kod yapısını unutmaları ve devam ettirememeleri. Bu gibi durumlara karşı; dünya üzerindeki PHP geliştiriciler tarafından standartlaşmış yapıları kullanmak daha mantıklı.

PHP projelerinde; bir framework kullanmak her zaman mantıklı bir çözüm olacaktır. Yukarıda saydığımız nedenlerden kurtulmanın en mantıklı yollarından birisi de framework kullanmak. Fakat anlamsız bir şekilde bazı PHP geliştiricileri framework kullanma konusunda oldukça katı davranmaktadırlar. İnanın bunu hala anlamış değilim.

PSR (PHP Standarts Recommendations), PHP-FIG tarafından geliştirilmiş kodlama standartlarıdır. PHP-FIG topluluğunun amacı; PHP kodlarının ve yazım stilinin standartlaşmasını sağlamak istemeleridir. Açıkcası; ben de bu oluşumu destekliyorum, çünkü PHP alanında gerçekten böyle bir şeye ihtiyaç var. Hatta oldukça da geç kalınmış bir durum. Java için kodlama standartları 1999 yılında yayınlanmıştır. PHP kodlamasında standartlaşmaya gidilmesi; geliştiricilerin ve geliştiricilerden sonra geliştiricilerin işlerini oldukça kolaylaştıracaktır.

PSR-4, yukarıdaki paragrafta bahsettiğimiz; PSR’nin bir standardıdır ya da şartnamesinden birisidir diyebiliriz. PSR-4’ün amacı: dizinlerdeki dosyaların otomatik olarak nasıl yükleneceğini veya çağrılacağını belirtir. Yani; __autoload() veya spl_autoload_register() fonksiyonlarını kullanmak yerine otomatik olarak bu dosyaların yüklenmesini sağlayabilirsiniz.

Peki nasıl?

Öncelikle; composer.json dosyanıza (yoksa hemen bir tane oluşturun) aşağıdaki satırları eklemekle işe başlayalım.

{
    "autoload": {
        "psr-4": {
            "Application\\": "application/"
        }
    }
}

Yukarıdaki satırlarımızda da görüldüğü üzere; PSR-4 standardını belirledik. Peki bu ne anlama geliyor?

Key yani sol taraftaki; Application deyimi, namespace alanı, sınıflarımızı kümelemek için kullanacağımız anahtar kelimemiz olacak. Value yani sağ taraftaki application deyimi ise; projemizde kullanacağımız dosyalarımızın saklanacağı dizin olacaktır.

Bu durumu şöyle açıklayalım.

|-application/
|-composer.json
|-index.php

Yukarıda basit bir dizin yapısı oluşturduk. composer.json dosyamızda belirttiğimiz gibi kullanacağımız dosyaları ya da şöyle anlatayım; oluşturduğumuz kütüphaneleri application dizininde saklayacağız ve kolayca çağıracağız.

Şimdi gelelim composer ile projemizi oluşturmaya. Bunun için de terminal (Console, CMD veya sisteminizde nasıl adlandırılıyorsa) açalım ve aşağıdaki satırımızı çalıştıralım.

$ composer update

Yukarıdaki satırımızı çalıştırdıktan sonra proje yapımız aşağıdaki gibi olacaktır.

|-application/ 
|-vendor/
|-composer.json 
|-index.php

Basit bir proje yapısı elde ettik. Şimdi gelelim bu proje yapımızı kullanmaya.

Peki bunu nasıl yapacağız?

application dizinimize basit bir sınıf oluşturalım. Sınıfımız aşağıdaki gibi olsun.

<?php

namespace Application;

class DatabaseClass 
{

    public function getRecord($id)
    {
        # code...
    }

    public function saveRecord($name, $surname, $age)
    {
        # code...
    }

    public function removeRecord($id)
    {
        # code...
    }

    public function uptadeRecord($id, $name, $surname, $age)
    {
        # code...
    }
}

application dizinine, Application namespace ile birlikte DatabaseClass isimli sınıfı oluşturduk. DatabaseClass sınıfını yine aynı isimle kaydedelim.

Proje dinimize tekrar bakalım.

|-application/
   -DatabaseClass.php
|-vendor/ 
|-composer.json 
|-index.php

Şimdi gelelim, oluşturmuş olduğumuz DatabaseClass sınıfını kullanmaya.

index.php dosyamıza vendor/autoload.php dosyasını ekleyelim.

<?php

require_once('vendor/autoload.php');

Önceki paragraflarda; namespace’in kümele oluşturduğundan bahsetmiştik. composer.json dosyasında; namespace olarak Application deyimini kullanmıştık. Oluşturduğumuz, DatabaseClass sınıfımızda Application kümesinin altında. Doğal olarak; Application\DatabaseClass şeklinde kullanırsak; DatabaseClass.php dosyamızda yüklenecektir.

<?php

require_once('vendor/autoload.php');

use Application\DatabaseClass;

Şimdi DatabaseClass sınıfımızı kullanabilirsiniz. Gördüğünüz gibi; autoload.php dışında herhangi bir dosya eklemedik.

$database = new DatabaseClass();

NOT: Burada dikkat edilmesi gereken bir husus var. Bu husus da; sınıf ismi ile dosyaya verdiğiniz isim aynı olmalı. Yukarıdaki yazdıklarımızı incelerseniz biz de öyle yaptık. Kısaca; sınıf ismi MailClass ise MailClass.php şeklinde de kaydedilmelidir. Çünkü; composer dosya ve sınıf isimlerini eşleştirerek çağırmaktadır. Ayrıca; sondaki class ibaresini kullanmamın nedeni; Abstract, Interface, DAO vs. gibi yapılar oluşturduğum için sınıf sonuna, oluşturulan yapının ne iş yaptığını ya da hangi amaçla kullanıldığını daha kolay farketmek için koyuyorum. Siz istediğiniz gibi isimlendirebilirsiniz.

Sadece bir dizin oluşturmak yerine birden fazla dizin de oluşturabilirsiniz. Yani; sadece bir dizine bağlı kalmak zorunda değilsiniz. Pek tabi bunu composer.json dosyasında belirtmeniz gerekiyor.

{
    "autoload": {
        "psr-4": {
            "MyProject\\Mail\\": "mail/",
            "MyProject\\Image\\": "image/",
            "MyProject\\Filter\\": "application/filter/"
        }
    }
}

Yukarıdaki yapımızda; farklı kütüphaneleri farklı dizinlerde topladık. Siz de böyle bir yapı kurmak isteyebilirsiniz.

Kategoriler: [PHP] Etiketler: #composer #PHP #psr-4

Bir cevap yazın

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

*

*
*

This site uses Akismet to reduce spam. Learn how your comment data is processed.