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 (GET
,POST
,PUT
, 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 (OK
,Not 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
veyahttps
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! 🚀