Yazılım Geliştirme

PHP 8.3 ile Yeni Özellikler ve Performans İyileştirmeleri

Fatih Algül
12.03.2026 11 görüntülenme

PHP 8.3'e Genel Bakış

PHP 8.3, Kasım 2023'te yayınlanan ve PHP ekosistemine önemli yenilikler getiren bir sürümdür. Bu sürüm, dilin tip güvenliğini artıran, performansı iyileştiren ve geliştiricilerin günlük iş akışlarını kolaylaştıran pek çok özellik içermektedir. Bu yazıda PHP 8.3 ile gelen başlıca yenilikleri detaylı şekilde inceleyeceğiz.

Typed Class Constants (Tipli Sınıf Sabitleri)

PHP 8.3'ün en önemli yeniliklerinden biri, sınıf sabitlerinin artık tip bildirimi ile tanımlanabilmesidir. Daha önceki sürümlerde sabitler herhangi bir tip kısıtlaması olmadan tanımlanabiliyordu ve bu durum, özellikle kalıtım zincirlerinde beklenmeyen hatalara yol açabiliyordu.

class OrderStatus
{
    const string PENDING = 'pending';
    const string APPROVED = 'approved';
    const string SHIPPED = 'shipped';
    const int MAX_RETRY = 5;
}

class SpecialOrderStatus extends OrderStatus
{
    // Bu hata verir çünkü üst sınıfta string olarak tanımlanmış
    // const int PENDING = 1; // TypeError!
    const string PENDING = 'special_pending'; // Geçerli
}

Bu özellik sayesinde, bir alt sınıf üst sınıfın sabitini geçersiz kılarken (override) tip uyumluluğu zorunlu hale gelir. Böylece büyük projelerde sabitlerin yanlışlıkla farklı tiplerle değiştirilmesi önlenmiş olur.

json_validate() Fonksiyonu

PHP 8.3 öncesinde bir JSON stringinin geçerli olup olmadığını kontrol etmek için genellikle json_decode() fonksiyonu kullanılır ve ardından json_last_error() kontrol edilirdi. Bu yaklaşım hem gereksiz bellek tüketiyordu hem de performans açısından verimsizdi. Yeni json_validate() fonksiyonu yalnızca doğrulama yapar, veriyi bellekte ayrıştırmaz.

$jsonString = '{"name": "Ahmet", "age": 30}';

// Eski yöntem
json_decode($jsonString);
if (json_last_error() === JSON_ERROR_NONE) {
    echo "Geçerli JSON";
}

// PHP 8.3 ile yeni yöntem
if (json_validate($jsonString)) {
    echo "Geçerli JSON";
}

// Geçersiz JSON kontrolü
var_dump(json_validate('{invalid}')); // false

Bu fonksiyon özellikle API geliştirirken gelen istek gövdelerinin hızlıca doğrulanması, büyük JSON dosyalarının ayrıştırılmadan önce kontrol edilmesi ve kuyruk sistemlerinden gelen mesajların formatının doğrulanması gibi senaryolarda büyük avantaj sağlar.

Dinamik Sınıf Sabiti Erişimi

PHP 8.3 ile sınıf sabitlerini dinamik olarak değişken üzerinden okumak artık mümkündür. Daha önce bu işlem için constant() fonksiyonu kullanılması gerekiyordu.

class Color
{
    const string RED = '#FF0000';
    const string GREEN = '#00FF00';
    const string BLUE = '#0000FF';
}

$colorName = 'RED';

// Eski yöntem
$value = constant("Color::$colorName");

// PHP 8.3 ile
$value = Color::{$colorName};
echo $value; // #FF0000

Bu söz dizimi özellikle konfigürasyon değerlerinin dinamik olarak okunması ve enum benzeri yapılarda çalışılması gibi durumlarda kodu çok daha okunabilir kılar.

#[\Override] Attribute (Niteliği)

Yeni #[\Override] niteliği, bir metodun üst sınıftan veya arayüzden geçersiz kılındığını (override) açıkça belirtmek için kullanılır. Eğer işaretlenen metod aslında hiçbir üst sınıf metodunu geçersiz kılmıyorsa, PHP derleme zamanında hata verir.

class ParentClass
{
    public function calculate(): int
    {
        return 0;
    }
}

class ChildClass extends ParentClass
{
    #[\Override]
    public function calculate(): int
    {
        return 42;
    }

    // Bu derleme hatası verir çünkü üst sınıfta böyle bir metod yok
    // #[\Override]
    // public function kalculate(): int { return 1; }
}

Bu özellik, refactoring sırasında üst sınıftan bir metod kaldırıldığında veya yeniden adlandırıldığında alt sınıflardaki sorunların anında tespit edilmesini sağlar. Yazım hatalarının (typo) erken yakalanması da önemli bir avantajdır.

Readonly Sınıfların Derin Klonlanması

PHP 8.2 ile gelen readonly sınıflar, PHP 8.3'te __clone() metodu içinde yeniden başlatılabilir hale geldi. Bu, derin klonlama (deep cloning) senaryolarını mümkün kılar.

readonly class Address
{
    public function __construct(
        public string $city,
        public string $street
    ) {}
}

readonly class User
{
    public function __construct(
        public string $name,
        public Address $address
    ) {}

    public function __clone()
    {
        // PHP 8.3 ile bu artık mümkün
        $this->address = clone $this->address;
    }
}

$user = new User('Fatih', new Address('Istanbul', 'Istiklal Cad.'));
$clonedUser = clone $user;

Randomizer Sınıfına Yeni Metodlar

PHP 8.2 ile tanıtılan Random\Randomizer sınıfı, PHP 8.3'te yeni metodlarla zenginleştirilmiştir:

$randomizer = new Random\Randomizer();

// getBytesFromString: Belirli karakterlerden rastgele string üretir
$token = $randomizer->getBytesFromString('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 8);
echo $token; // Örnek: "K7X2MP9Q"

// getFloat: Belirtilen aralıkta rastgele ondalık sayı üretir
$price = $randomizer->getFloat(0.0, 100.0);
echo $price; // Örnek: 47.832

// nextFloat: 0 ile 1 arasında rastgele ondalık sayı üretir
$probability = $randomizer->nextFloat();
echo $probability; // Örnek: 0.7234

Bu metodlar, güvenli token üretimi, fiyat simülasyonları ve olasılık hesaplamaları gibi pek çok senaryoda rand() ve mt_rand() fonksiyonlarına göre çok daha güvenli ve esnek bir alternatif sunar.

Performans İyileştirmeleri

PHP 8.3, motor düzeyinde çeşitli optimizasyonlar içermektedir:

  • Daha hızlı sınıf çözümleme: Sınıf yükleme ve isim çözümleme işlemleri optimize edilmiştir. Özellikle autoload yoğun projelerde fark edilir iyileşme sağlar.
  • Bellek kullanımı iyileştirmeleri: İç veri yapılarının bellek ayak izi azaltılmıştır. Uzun süre çalışan worker süreçlerinde bu iyileştirme belirgin şekilde hissedilir.
  • JIT derleyici güncellemeleri: JIT (Just-In-Time) derleyicisinde yapılan iyileştirmeler, yoğun hesaplama gerektiren işlemlerde performans artışı sağlar.
  • range() fonksiyonu optimizasyonu: range() fonksiyonu daha katı tip kontrollerine sahip olmuş ve hatalı kullanımlar artık erken yakalanmaktadır.
  • Daha verimli opcode cache: OPcache üzerindeki iyileştirmeler, özellikle büyük ölçekli uygulamalarda sayfa başına yanıt süresini kısaltır.

Deprecation (Kullanımdan Kaldırma) Uyarıları

PHP 8.3 bazı eski kullanımları da kullanımdan kaldırmıştır. Bunların bilinmesi, gelecekteki PHP sürümlerine hazırlık açısından önemlidir:

  • get_class() ve get_parent_class() fonksiyonlarının parametresiz çağrılması artık deprecation uyarısı verir. Bunun yerine static::class veya parent::class kullanılmalıdır.
  • array_pad(), array_push() gibi fonksiyonlarda boş dizi davranışı düzenlenerek tutarlılık sağlanmıştır.
  • SQLite3 sınıfında bazı metodların varsayılan davranışları değiştirilmiştir.

PHP 8.3'e Geçiş İçin Öneriler

  1. Bağımlılıklarınızı kontrol edin: Kullandığınız Composer paketlerinin PHP 8.3 ile uyumluluğunu composer why-not php 8.3 komutuyla doğrulayın.
  2. Deprecation loglarını inceleyin: Mevcut uygulamanızı PHP 8.3 üzerinde çalıştırarak deprecation uyarılarını tespit edin ve düzeltin.
  3. Test süitinizi çalıştırın: Tüm birim ve entegrasyon testlerinizi PHP 8.3 ortamında koşturun.
  4. Yeni özellikleri kademeli olarak benimseyin: Tipli sabitler ve #[\Override] gibi özellikleri mevcut kod tabanınıza aşamalı olarak entegre edin.
  5. php.ini ayarlarını gözden geçirin: Yeni sürümle birlikte değişen veya eklenen yapılandırma direktiflerini kontrol edin.

Sonuç

PHP 8.3, dilin tip güvenliğini ve ifade gücünü artıran, performansı iyileştiren ve geliştirici deneyimini önemli ölçüde geliştiren bir sürümdür. Tipli sınıf sabitleri, #[\Override] niteliği ve json_validate() gibi eklemeler günlük geliştirme süreçlerini kolaylaştırırken, motor düzeyindeki optimizasyonlar uygulama performansına doğrudan katkı sağlar. Projenizi PHP 8.3'e geçirmek, hem kodunuzun kalitesini artıracak hem de gelecekteki PHP sürümlerine hazırlıklı olmanızı sağlayacaktır.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç