PHP - Rota Sistemi

Patron, uzmanı olmadığı alana müdahale ederse kendi işini zorlaştırır. Bu yüzden patron kararları müdürüne bırakıp, şirketinin gidişatını izleye durur. Rota sisteminde de durum aynıdır. PHP, Apache Server'dan tam yetki alıp tüm yönlendirme kontrollerini kendi içinde yaparak kodlarda düzen ve kolaylık sağlar.

MVC tabanlı bir framework ile çalıştıysanız, router dosyasını bilmemeniz imkansızdır. Daha önce framework kullanmamış arkadaşlara kısaca tanıtımını yapayım. Rota Sistemi: link yapısını belirlediğimiz dosyadır. .htaccess dosyasının gelişmiş versiyonu olarak düşünebilirsiniz.

Konu neydi?

Konuyu çok dallandırıp budaklandırdığımın farkındayım. Bu yazımda sizlere basit bir Route sınıfını anlatacağım. İşleme başlamadan mal sahibi Apache Server'dan tam yetki almamız gerekiyor.

Kök dizininizde .htaccess dosyası oluşturun varsa düzenleyin.

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Tüm istekleri index.php dosyasına yönlendir.
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Artık tüm linkler index.php dosyasına gidiyor. Tüm güç php'de olduğuna göre kontrolü de ele almaya başlayalım. 



Abstract(Soyut) Sınıflar ve Interface(Arayüzler)

Soyut sınıflar, kendisinden türetilecek olan sınıflara arayüz sağlar. Türeteceğiniz yeni sınıfları bir kalıba(arayüz) zorlar ve kalıtımla kod tekrarını azaltır. Soyut sınıfllar, tek başlarına bir anlam ifade etmezler. Bu yüzden soyut sınıflardan nesne üretilemez.

abstract  anahtar kelimesini metot veya sınıfların başlarına yazarak tanımlayabilirsiniz. Eğer bir absract metot tanımladıysanız kesinlikle o metotun sınıfını da abstract olarak tanımlamalısınız. Aksi takdirde hata verecektir.

Soyut metotlara  kendi sınıfı içinde gövde yazılamaz ve türetildiği sınıfta bu metotlar ezilmek(override) zorundadır yani yeniden tanımlanmalıdır.

Teknik bilgieri geçtiğimize göre örneğimize geçelim.



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.