PSR Standartları Nedir? PHP FIG Standartları ile Kod Kalitenizi Artırın

3 Feb 2025

Giriş

PHP dünyasında kod standartlarını belirleyen en önemli kılavuzlardan biri PHP Standards Recommendation (PSR)’dır. Bu standartlar, PHP Framework Interop Group (PHP-FIG) tarafından geliştirilmiş olup, PHP projelerinin daha okunabilir, sürdürülebilir ve birlikte çalışabilir olmasını amaçlar.

Bu makalede PSR standartlarının ne olduğunu, neden önemli olduklarını ve en sık kullanılan PSR önerilerini inceleyeceğiz.


PSR Standartları Neden Önemlidir?

PSR standartları, farklı geliştiriciler veya ekipler tarafından yazılan kodların tutarlı olmasını sağlar. Bu sayede:

  • Kod okunabilirliği artar,

  • Bakımı kolaylaşır,

  • Framework ve kütüphaneler arasında uyumluluk sağlanır,

  • Geliştirme süreci hızlanır,

  • Takım içi işbirliği güçlenir.

Özellikle büyük ölçekli projelerde PSR standartlarını takip etmek, teknik borcun önüne geçmek için kritik öneme sahiptir.


Popüler PSR Standartları ve Açıklamaları

PSR-1: Temel Kodlama Standartları

PSR-1, PHP projelerinde temel kodlama standartlarını belirler. Başlıca kurallar şunlardır:

✅ Sınıf adları PascalCase biçiminde olmalıdır.
✅ Sabitler BÜYÜK_HARF formatında tanımlanmalıdır.
✅ Metod isimleri camelCase biçiminde olmalıdır.
✅ PHP dosyaları <?php veya <?= ile başlamalıdır.
✅ UTF-8 karakter kodlaması kullanılmalıdır.

PSR-2: Kodlama Stili Rehberi (PSR-12 ile Güncellendi)

PSR-2, kodun okunaklı olmasını sağlamak için girinti, boşluklar, satır uzunluğu gibi formatlama kurallarını belirler. Öne çıkan kurallar:

Girinti için 4 boşluk kullanılmalı (Tab yerine boşluk).
Satır uzunluğu 80-120 karakter arasında olmalı.
Sınıf ve metod tanımları arasında boşluk bırakılmalı.
Açılış süslü parantezi ({) bir alt satıra yerleştirilmeli.

Not: PSR-2, zamanla geliştirilerek PSR-12 ile güncellendi. Günümüzde PSR-12 kullanılması önerilir.


PSR-12: Modern Kodlama Stili Standartları (PSR-2'nin Yerini Aldı)

PSR-12, önceki PSR-2 standardının geliştirilmiş versiyonudur ve modern PHP özelliklerini kapsar. En önemli kurallar şunlardır:

  • Girinti için 4 boşluk kullanılmalı (Tab yerine boşluk).

  • Satır uzunluğu en fazla 120 karakter olmalı.

  • Sınıf ve metod tanımlarında açılış süslü parantezi ({) alt satıra yazılmalı.

  • Namespace ve use ifadeleri gruplandırılmalı.

  • Return tipleri belirtilmeli (function foo(): string).

  • Tekli ve çoklu satırlı use ifadeleri arasında boşluk bırakılmalı.

Örnek bir PSR-12 uyumlu kod bloğu:

namespace App\Controllers;

use App\Models\User;
use Psr\Log\LoggerInterface;

class UserController
{
    private LoggerInterface $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function getUser(int $id): ?User
    {
        return User::find($id);
    }
}

PSR-7: HTTP Mesajları Standardı

PSR-7, PHP uygulamalarında HTTP istek (Request) ve yanıt (Response) nesnelerini standartlaştıran bir öneridir. RESTful API'ler, middleware sistemleri ve framework'ler arasında uyumluluğu artırmayı amaçlar.

Bu standart, HTTP mesajlarını değiştirilemez (immutable) ve nesne yönelimli (OOP) hale getirerek güvenli ve esnek bir yapı sunar.

PSR-7'nin Getirdiği Standart HTTP Nesneleri

PSR-7, HTTP mesajlarıyla çalışmak için şu temel arayüzleri tanımlar:

1. RequestInterface (İstek Nesnesi)

Gelen HTTP isteğini temsil eder.

  • getMethod(): HTTP metodunu döndürür (GETPOSTPUT, vb.).

  • getUri(): URI bilgisini döndürür.

  • getHeaders(): Tüm HTTP başlıklarını (headers) döndürür.

  • getBody(): HTTP gövdesini (body) alır.

$request->getMethod(); // GET
$request->getUri(); // /api/users
$request->getHeader('Content-Type'); // application/json

2. ResponseInterface (Yanıt Nesnesi)

HTTP yanıtını temsil eder.

  • getStatusCode(): HTTP durum kodunu alır (200, 404, 500, vb.).

  • getReasonPhrase(): Durum kodunun açıklamasını alır (OKNot Found, vb.).

  • getBody(): Yanıt gövdesini alır.

$response->getStatusCode(); // 200
$response->getReasonPhrase(); // OK
$response->getBody(); // JSON veya HTML çıktısı

3. ServerRequestInterface (Sunucu İsteği)

RequestInterface'e ek olarak, $_POST, $_GET, $_FILES, $_COOKIE gibi süper global değişkenleri içeren HTTP isteklerini işler.

  • getParsedBody()POST verisini döndürür.

  • getQueryParams(): Query string parametrelerini alır.

  • getUploadedFiles(): Yüklenen dosyaları getirir.

$request->getQueryParams(); // ['id' => 5]
$request->getParsedBody(); // ['name' => 'Kaan']

4. StreamInterface (Akış Nesnesi - HTTP Body)

HTTP isteği veya yanıtının gövdesini (body) yönetmek için kullanılır.

  • read($length): Belirtilen uzunlukta veri okur.

  • write($data): Veri yazar.

  • getContents(): Tüm içeriği döndürür.

$body = $response->getBody();
echo $body->getContents(); // JSON ya da HTML içeriği
 

5. UploadedFileInterface (Dosya Yükleme)

PSR-7, dosya yüklemelerini standart hale getirir.

  • getClientFilename(): Dosyanın orijinal adını alır.

  • getClientMediaType(): MIME türünü döndürür.

  • moveTo($targetPath): Dosyayı belirlenen dizine taşır.

$uploadedFile = $request->getUploadedFiles()['profile_picture'];
$uploadedFile->moveTo('/var/www/uploads/avatar.jpg');

6. UriInterface (URI Yönetimi)

URL bileşenlerini yönetir.

  • getScheme()http veya https döndürür.

  • getHost(): Alan adını döndürür.

  • getPath(): URI yolunu döndürür.

  • getQuery(): Query string parametrelerini döndürür.

$uri = $request->getUri();
echo $uri->getScheme(); // https
echo $uri->getHost(); // example.com
echo $uri->getPath(); // /api/users

PSR-7 Nerelerde Kullanılır?

PSR-7, modern PHP uygulamalarında aşağıdaki alanlarda yaygın olarak kullanılır:

✅ Framework'ler: Laravel, Symfony gibi framework’ler PSR-7'yi destekler.
✅ Middleware Sistemleri: Slim Framework gibi hafif yapılar PSR-7 uyumludur.
✅ API Geliştirme: RESTful API'lerde standart HTTP mesaj yönetimi sağlar.
✅ Microservis Mimarisi: Servisler arası HTTP iletişimini standart hale getirir.

PSR-7, PHP’de HTTP mesajlarını standartlaştırarak uygulamalar arasında uyumluluğu artırır. Request, Response, Stream, URI ve dosya yükleme gibi nesneleri tanımlayarak modern web uygulamalarında temiz ve sürdürülebilir bir yapı sunar.

Eğer API geliştiriyor, HTTP middleware yazıyor veya framework'ler ile çalışıyorsanız, PSR-7 standartlarını anlamak ve uygulamak büyük avantaj sağlayacaktır. 🚀


PSR-3: Logger Arayüzü

PSR-3, PHP'de loglama işlemleri için ortak bir arayüz sunar. Log seviyeleri RFC 5424 standardına uygundur:

🔹 emergency() – Sistem kullanılamaz durumda.
🔹 alert() – Hemen müdahale gerektiren durum.
🔹 critical() – Kritik hata.
🔹 error() – Genel hata.
🔹 warning() – Uyarılar.
🔹 notice() – Dikkat edilmesi gereken durumlar.
🔹 info() – Genel bilgi mesajları.
🔹 debug() – Debug amaçlı detaylar.

Laravel gibi framework'lerde PSR-3 uyumlu Monolog gibi kütüphaneler kullanılır.

PSR-4: Otomatik Yükleme Standardı

PSR-4, PHP'de namespace ve dosya yapısını belirleyerek otomatik yükleme (autoloading) işlemini standartlaştırır.

Örneğin, şu sınıf tanımlamasını ele alalım:

namespace App\Controllers;

class UserController {
    // ...
}

Bu sınıfın dosya yolu şu şekilde olmalıdır:

/src/App/Controllers/UserController.php

Bu yapı sayesinde Composer gibi autoload mekanizmaları, dosyaları otomatik olarak yükleyebilir.

PSR-6 & PSR-16: Caching Standartları

PSR-6 ve PSR-16, PHP uygulamalarında önbellekleme (cache) işlemlerini standart hale getirir.

  • PSR-6, esnek ve modüler bir cache sistemi sunar.

  • PSR-16, daha basit ve performans odaklı bir cache arayüzüdür.

Laravel, Symfony gibi framework'lerde PSR-16 uyumlu cache sürücüleri kullanılır.


Sonuç

PSR standartları, PHP dünyasında temiz, düzenli ve sürdürülebilir kod yazmak için kritik bir kılavuzdur. PSR-1, PSR-12, PSR-4 ve PSR-3 gibi standartlar, modern PHP projelerinde en yaygın kullanılanlardır.

Eğer profesyonel bir PHP geliştiricisi olarak kod kalitenizi artırmak istiyorsanız, PSR standartlarını öğrenmek ve uygulamak kaçınılmazdır.

Siz PSR standartlarını kullanıyor musunuz? Yorumlarda düşüncelerinizi paylaşabilirsiniz! 🚀

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanacaktır. Bildirim almak isterseniz e-posta adresinizi girebilirsiniz.

Ziyaretçi İstatistiği
6 ay önce'den beri sayılıyor
14140

Designed & developed by
Kaan Tanış  with 🫶