PHP kategorisine ait yazılarım.

Composer Nedir?

Composer Nedir?

Kısaca PHP için geliştirilmiş bir bağımlılık yönetim aracıdır. Projenizde kullanmak istediğiniz kütüphane isimlerini tanımlarsınız Composer sizin için indirir ve kullanıma hazır hale getirir. Ayrıca güncelleme kolaylığıyla da kütüphanelerinizi uğraşmadan en güncel haliyle kullanabilirsiniz. Bitti mi? Bitmedi, abiler ablalar elimde görmüş olduğunuz Composer bizlere PSR standartlarında autoload da sunuyor. 

PHP dünyasının gerilmesini, tartışmasız composer engellemiştir. Çünkü java da maven, nodejs de npm, ruby de bundler gibi bağımlılık yöneticileri bulunmaktaydı. Composer'ın bize kazandırdıkları saymakla bitmez. Bu yüzden lafı çok uzatmadan anlatıma başlayayım.

Composer Nasıl Kurulur?

Linux/Unix İşletim Sistemlerinde:

1. Seçenek: Curl yüklü ise:

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

2. Seçenek: Eğer yüklü değilse aşağıdaki kod ile composer.phar dosyasını indirin:

php -r "readfile('https://getcomposer.org/installer');" | php

composer.phar dosyasını indirdikten sonra aşağıdaki kod ile sistem dizininize taşıyın.

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

Windows İşletim Sisteminde:

Composer-Setup.exe dosyasını indirin ve kurun.




Autoload (Özdevinimli) Sınıf Yükleme

Autoload Nedir? Ne İşe Yar?

Sınıflarla ilgili işlem yaptığımız anda o sınıfın kaynak dosyasını sayfamıza otomatik dahil eder. Bu yazımda __autoload ve spl_autoload_register fonksiyonlarından bahsedeceğim.

Basit bir örnekle anlatıma başlayayım.

<?php

function __autoload($sinif_ismi)
{
    $sinif_adresi = __DIR__.DIRECTORY_SEPARATOR."lib".DIRECTORY_SEPARATOR.$sinif_ismi . ".php";

    //is_readable() : Bir dosyanın mevcut ve okunabilir olup olmadığını söyler
    if (is_readable($sinif_adresi)) {
        require $sinif_adresi;
    }
}

echo Kullanici::TANIM;

__autoload ( $class ){/* ... */} fonksiyonu erişmeye çalıştığınız sınıfları bulamazsa otomatik devreye girer ve sınıf adını parametre olarak bu fonksiyona gönderir. İstediğimiz işlemi bu fonksiyonun içinde yapabiliriz.

Yukarıdaki örnekte Kullanici sınıfımda bulunan TANIM sabitini ekrana yazdırdım. Kullanici sınıfım sayfama dahil edilmediği için __autoload($sinif_ismi = "Kullanici")){} fonksiyonu çalıştı.

Fonksiyonum içinde require "C:\xampp\htdocs\oop\lib\Kullanici.php" kod satırıyla Kullanici sınıfımı sayfama otomatik dahil etmiş oldum.

Namespace kullansaydık?

Sınıfımızda namespace tanımladığımız anda işler biraz daha karışıyor.



Sihirli Sabitler

Sihirli sabitler, değerleri kullanıldıkları yere göre değişen sabitlerdir. 

İsim Açıklama
__LINE__ Dosyada bu sabitin bulunduğu satırın numarası verir.
__FILE__ Dosyanın tam dosya yolu ve dosya isminin verir. include ile başka bir yerden dahil etseniz bile sabitin bulunduğu dosyanın yolunu gösterir.
__DIR__ Dosyanın bulunduğu dizini verir. include ile başka bir yerden dahil etseniz bile sabitin bulunduğu dosyanın yolunu gösterir.
__FUNCTION__ Fonksiyon ismini verir.
__CLASS__ Sınıf ismini verir.
__TRAIT__ Trait ismini verir.
__METHOD__ Metot ismini verir.
__NAMESPACE__ İsim Alanını gösterir.


Namespace Nedir?

Namespace(İsim Alanı) Nedir?

Kısaca; aynı isimde farklı sınıflar oluşturmak için kullandığımız küme adlarına namespace denir.

İsim alanlarından; sınıflar, fonksiyonlar ve sabitler etkilenir. Çoğunlukla sınıflara tanımlanır.

Örneğin: Hem satıcı hem alıcı bulunduran bir e-ticaret sistemi yazıyoruz. Böyle bir sistemde kullanıcıların, mantıken birbirinden farklı özelliklere sahip olması gerekir. 

lib/musteri/Kullanici.php

<?php
class Kullanici
{
  const TANIM = "Ben müşteri kullanıcısıyım";
}

lib/magaza/Kullanici.php

<?php
class Kullanici
{
  const TANIM = "Ben mağaza kullanıcısıyım";
}

index.php

<?php
require "lib/musteri/Kullanici.php";
require "lib/magaza/Kullanici.php";

İki ayrı sınıfı, aynı dosyada çalıştırmaya çalıştığımız anda PHP bize; "kafam karıştı, bir tane Kullanici sınıfı tanımla" diyecektir. İşte tam burada namespace devreye giriyor.