PHP 8 ile Gelen Kullanışlı Özellikler: Nasıl Çalışır?

SonKeşke

Yeni Üye
Katılım
Eyl 2026
Konular
1
Mesajlar
1
Tepki puanı
0
Görüntülenme
0

JIT (Just‑In‑Time) derleyicisi​


PHP 8’de eklenen JIT, belirli kod bloklarının derlenip native CPU koduna dönüştürülmesini sağlar. Yöntem şu adımları içerir:

  1. Opcode toplama – PHP’nin yürütme motoru, çalıştırma sırasında op‑code’ları toplar.
  2. Analiz – Toplanan kod, JIT hedefi için veri akışı analizi yapılır.
  3. Kod üretimi – Analizden sonra, op‑code’lar LLVM gibi aracıyla machine‑code’a çevrilir.
  4. Boşanma – Üretilen kod, JVM benzeri bir ortamda yürütülür.

Bu sürecin en kritik bileşenini JIT, -d opcache.jit_buffer_size=100M ayarıyla kontrol edilir. Küçük döngüli hesaplamalarda JIT’in azlıklandırılması, bellek kullanımı arttırırken performans kazandırır.

PHP:
<?php
// Basit döngü
$sum = 0;
for ($i = 0; $i < 1e6; $i++) {
    $sum += $i;
}

JIT aktifken aynı kod, yaklaşık %30 hız kazanabilir. Ancak I/O ağırlıklı betikler için kayda değer fark yoktur.

Adlandırılmış Argüman ve Varsayılan Değerler​


PHP:
function sendMail(string $to, string $subject, string $body = 'Hi') {}
sendMail(to: 'user@example.com', subject: 'Hi');

Nasıl Çalışır?
PHP, fonksiyon çağrısında isimle eşleşen parametreleri doğrudan atar; argüman sırası artık önemli değildir. Bu, okunabilirliği artırır ve kod karışıklığını azaltır.

Constructor Property Promotion​


PHP:
class User {
    public function __construct(
        private string $name,
        private int $age
    ) {}
}

Kavramsal olarak, __construct içinde private alanları tanımlamamanın yerine, doğrudan yapılandırıcıya eklenir. Bu, sınıf gövdesini sadeleştirir ve readonly ile birleştiğinde veri tutarlılığı sağlar.

Union Types & Match İfadeleri​


PHP:
function filter(mixed $value): int|string {
    return match (true) {
        is_int($value) => $value,
        is_string($value) => (int)$value,
        default => throw new InvalidArgumentException()
    };
}

Union type, bir parametrenin birden fazla tip almasını mümkün kılar; match ise switch’e gömülü güvenli eşleşme sağlar. Bu ikili, tipi doğru kontrol etmek için tasarlanmıştır.

Nullsafe Operatörü​


PHP:
$user = $session->getUser()?->profile?->avatarUrl;

Eğer getUser() ya da profile null dönerse, dönen değer doğrudan null olur; -> yerine ?-> kullanılır. Böylece Notice: Trying to get property of non-object hatasını önler.

Okunabilir Arrow Functions​


PHP:
$nums = [1, 2, 3];
$result = array_map(fn($n) => $n * 2, $nums);

fn sözdizimi, tek satır lambda fonksiyonlar için kullanılır. Değişkenler otomatik olarak use ile geçirildiği için kod sadeleşir.

Readonly Properties​


PHP:
class Config {
    public readonly string $path;
    public function __construct(string $path) {
        $this->path = $path;
    }
}

Bu işaretleme sayesinde nesne oluşturulduktan sonra path değiştirilemez. Veri bütünlüğü kritik uygulamalarda faydalıdır.

Özet​


  • JIT derleme hızı, JIT boyut ayarı ile denetlenir.
  • Adlandırılmış argüman çağrı sırasını esnetir.
  • Constructor promotion, sınıf tanımını sıkılaştırır.
  • Union types ve match, tip kontrolünü artırır.
  • Nullsafe operatörü hatalı nesne erişimini engeller.
  • Arrow functions lambda kodunu küçültür.
  • Readonly ise nesnenin sadece okunabilirliği garanti eder.

Siz PHP 8’te JIT’i etkinleştirirken hangi koşullarda kullanmayı tercih edersiniz?

İlgili konular​

 
Geri
En Üst