PHP 8.5 Geliyor! Geliştiricileri Bekleyen 10 Yeni Güç ve 4 Önemli Veda

0
2
PHP 8.5 Geliyor!
PHP 8.5 Geliyor!

PHP 8.5 Geliyor! Geliştiricileri Bekleyen 10 Yeni Güç ve 4 Önemli Veda

Çoğumuz henüz Php 8.4’ü bile deneyimlememişken Kasım 2025’de PHP ekosistemi için önemli bir kilometre taşını yani Php 8.5’i  duyurmaya hazırlanıyor. Kodlamanın evrimini sürdüren PHP 8.5, performans iyileştirmelerinin yanı sıra özellikle geliştirici deneyimini (Developer Experience – DX) doğrudan etkileyen bir dizi yeni özellik ve temizlik operasyonuyla birlikte geliyor.

PHP 8.0’ın JIT derleyicisi gibi devrimsel yeniliklerinin ardından, 8.x serisi daha çok dili modernize etmeye, tip güvenliğini artırmaya ve uzun zamandır beklenen ergonomik iyileştirmeleri sunmaya odaklandı. PHP 8.5 de bu felsefeyi devam ettiriyor.

Bu güncelleme kod tabanlarımızı daha temiz, daha güvenli ve daha yetenekli hale getirecek 10 dikkat çekici yeni özelliği ve dilin geleceğine hazırlık amacıyla 4 önemli kullanımdan kaldırma (deprecation) duyurusunu içeriyor.

İşte PHP 8.5 ile birlikte masaya gelenlere detaylı bir bakış.

PHP 8.5: Öne Çıkan 10 Yeni Özellik

Bu sürümdeki yenilikler, dilin farklı köşelerine dokunuyor; tip sisteminden string manipülasyonuna, hatta kriptografiye kadar uzanıyor.

PHP 8.5 Geliyor!
PHP 8.5 Geliyor!

1. Sınıf Sabitleri için Tip Belirleme (Typed Class Constants)

PHP 8.3 ile gelen readonly sınıflar ve özelliklerden sonra, dilin tip sistemi genişlemeye devam ediyor. PHP 8.5 geliştiricilerin yıllardır beklediği bir özelliği getiriyor: Artık sınıf const (sabit) tanımlamalarında tip belirtebiliyoruz.

Eski Yöntem (PHP < 8.5):

class Config {
// Tip belli değil, sadece yorumla belirtilebiliyor
/* @var string */
const VERSION = ‘1.0.0’;
}

Yeni Yöntem (PHP 8.5):

class Config {
    // Artık zorunlu ve net
    public const string VERSION = '1.0.0';
}

interface LoggerInterface {
    public const int LEVEL_INFO = 1;
    public const int LEVEL_WARN = 2;
}

Bu değişiklik, statik analiz araçlarının işini kolaylaştıracak ve kodun kendi kendini belgeleme yeteneğini kökten artıracak.

2. Çoklu Bayt Desteği: mb_str_pad()

PHP’nin standart str_pad() fonksiyonu, Türkçe karakterler (‘ü’, ‘ş’, ‘ğ’) veya emojiler gibi çoklu bayt (multibyte) karakterlerle çalışırken hatalı sonuçlar üretiyordu. mbstring eklentisi bu eksikliği gidermeye devam ediyor.

PHP 8.5, mb_str_pad() fonksiyonunu tanıtarak bu sorunu çözüyor. Artık UTF-8 string’leri güvenle doldurabileceğiz.

// Eski hatalı davranış
echo str_pad('ömer', 10, ' ', STR_PAD_LEFT); 
// Çıktı: "       ömer" (görsel olarak doğru görünse de bayt hesabı yanlıştır)

// Yeni doğru davranış
echo mb_str_pad('ömer', 10, ' ', STR_PAD_LEFT);
// Çıktı: "      ömer" (Karakter sayısına göre doğru boşluk bırakır)

3. Yeni Dizi Yardımcıları: array_find()

Diziler üzerinde arama yapmak için array_filter kullanıp ardından ilk elemanı almak ([0] veya reset()) yaygın bir kalıptı. PHP 8.5, bu işlemi basitleştiren array_find() fonksiyonunu sunuyor.

Bu fonksiyon, bir “callback” (geri arama) fonksiyonunu karşılayan ilk elemanı veya null döner.

$users = [
    ['id' => 1, 'name' => 'Ali', 'active' => false],
    ['id' => 2, 'name' => 'Veli', 'active' => true],
    ['id' => 3, 'name' => 'Ayşe', 'active' => true]
];

// Aranan ilk aktif kullanıcıyı bul
$firstActiveUser = array_find(
    $users,
    fn($user) => $user['active'] === true
);

// $firstActiveUser: ['id' => 2, 'name' => 'Veli', 'active' => true]

4. Alfanümerik Artırma/Azaltma: str_increment() ve str_decrement()

Perl’den ilham alan PHP’nin “artırma” operatörü (++), harfleri de artırabilme özelliğine sahipti ('a'++ sonucu 'b' olur). Ancak bu davranış her zaman tutarlı değildi ve sadece basit ASCII harfleriyle sınırlıydı.

PHP 8.5, bu işlevi daha güvenli ve belirgin hale getiren iki yeni fonksiyon sunuyor:

echo str_increment('A-9'); // Çıktı: 'B-0'
echo str_increment('Z-9'); // Çıktı: 'AA-0'

echo str_decrement('B-0'); // Çıktı: 'A-9'

Bu, özellikle envanter kodları, fatura numaraları veya URL kısaltmaları gibi alfanümerik tanımlayıcılarla çalışanlar için büyük kolaylık sağlayacak.

5. round() Fonksiyonu için Yeni Yuvarlama Modu

PHP’nin round() fonksiyonu, varsayılan olarak “yarımı yukarı yuvarla” (TIE_HALF_UP) kuralını kullanır (örn: 2.5 -> 3.0). PHP 8.5, ROUND_TIE_HALF_TO_EVEN (Bankacı Yuvarlaması) modunu ekliyor.

Bu modda, x.5 değerleri en yakın çift sayıya yuvarlanır. Bu yöntem, finansal hesaplamalarda ve istatistiksel analizlerde uzun vadede biriken yuvarlama hatalarını minimize etmek için kullanılır.

// 'Half to even' modu
echo round(2.5, 0, ROUND_TIE_HALF_TO_EVEN); // Çıktı: 2.0
echo round(3.5, 0, ROUND_TIE_HALF_TO_EVEN); // Çıktı: 4.0

6. json_decode() için Gelişmiş Anahtar Çözümleme

son_decode() fonksiyonu, JSON_DECODE_KEY_AS_ARRAY_KEY adında yeni bir bayrak (flag) kazanıyor. Bu, özellikle karmaşık anahtar (key) yapılarına sahip JSON verilerini işlerken ortaya çıkan bir sorunu çözüyor.

7. DateTime::createFromTimestamp() Metodu

Unix zaman damgasından (timestamp) bir DateTime nesnesi oluşturmak için genellikle new DateTime('@' . $timestamp) gibi bir “workaround” (geçici çözüm) kullanılırdı. PHP 8.5, daha temiz ve okunabilir bir statik fabrika metodu sunuyor:

$timestamp = 1731427200; // 12 Kasım 2025

// Yeni yöntem
$date = DateTime::createFromTimestamp($timestamp);

8. DOMNode::cloneNode() Geliştirmesi

DOMNode::cloneNode() metodunun deep (derin) klonlama parametresi, daha önce false olarak varsayılan bir değere sahipti. Bu, çoğu geliştiricinin beklentisinin aksine, sadece düğümün kendisini klonlayıp alt elemanlarını (children) almıyordu. PHP 8.5’te bu parametrenin varsayılan değeri true olarak değiştirildi, bu da beklenen davranışı (tüm alt ağacı klonlama) varsayılan hale getirdi.

9. Closure::fromCallable() ve Readonly Metotlar

Readonly (salt okunur) sınıflar ve metotlarla Closure::fromCallable() kullanıldığında ortaya çıkan bazı kenar durumlar (edge cases) düzeltildi, bu da dilin readonly sistemini daha sağlam hale getirdi.

10. Yeni Sodium Kriptografi Fonksiyonları

Güvenlik odaklı Sodium eklentisi, XChaCha20-Poly1305 AEAD algoritması için destek kazanıyor. sodium_crypto_aead_xchacha20poly1305_* ile başlayan yeni fonksiyonlar, modern ve yüksek güvenlikli şifreleme ihtiyaçları için daha fazla seçenek sunuyor.


 PHP 8.5: Kullanımdan Kaldırılan 4 Özellik

Temizlik operasyonu, PHP 9.0’a giden yolda dilin sadeleşmesi için kritik öneme sahip. PHP 8.5’te “kullanımdan kaldırıldı” (deprecated) olarak işaretlenen özellikler, PHP 9.0’da tamamen kaldırılacaktır. Bu sürümde ise bir E_DEPRECATED uyarısı tetikleyecekler.

1. mb_convert_encoding(): html-entities Desteği

mb_convert_encoding() fonksiyonunu html-entities argümanıyla kullanmak artık tavsiye edilmiyor. Bu işlemin davranışı kafa karıştırıcıydı ve htmlspecialchars() veya mb_encode_numericentity() gibi daha spesifik fonksiyonların kullanılması öneriliyor.

2. IntlDateFormatter::setDateType/setTimeType için Null Değerler

IntlDateFormatter sınıfının bu metotlarına null değer geçmek, belirsiz bir davranışa yol açıyordu. Tip güvenliğini artırmak amacıyla bu kullanıma artık izin verilmeyecek.

Php 8.5 Yenilikleri
Php 8.5 Yenilikleri

3. NumberFormatter::TYPE_CURRENCY Sabiti

NumberFormatter sınıfında para birimi formatlaması yapmak için bu sabit yerine, daha açık ve doğru olan formatCurrency() metodunun kullanılması teşvik ediliyor.

4. track_errors INI Direktifi

Eski bir hata izleme mekanizması olan track_errors direktifi (ve buna bağlı $php_errormsg değişkeni) artık kullanımdan kaldırıldı. Modern PHP’de hataları yakalamak için error_get_last() fonksiyonu veya try-catch blokları gibi çok daha üstün yöntemler bulunuyor.


PHP 8.5, dilin olgunluk dönemini yaşadığını gösteren rafine bir sürüm. “Sınıf Sabitleri için Tipler” gibi uzun zamandır beklenen özellikler, PHP’yi statik analiz ve tip güvenliği konusunda Java veya C# gibi dillere bir adım daha yaklaştırıyor. mb_str_pad ve array_find gibi küçük ama etkili yardımcılar ise günlük kodlama pratiklerini doğrudan iyileştirecek.

Kullanımdan kaldırılan özellikler ise dilin üzerindeki tarihsel yükü atma ve PHP 9.0 için daha temiz bir temel oluşturma niyetini açıkça gösteriyor.

Geliştiricilerin, yeni sürüm yayınlanır yayınlanmaz kod tabanlarını bu değişikliklere (özellikle kullanımdan kaldırmalara) karşı test etmeye başlamaları ve bağımlılıklarını güncellemeleri tavsiye ediliyor.

PHP 8.4 ile PHP 8.5 Arasında Kıyaslama

PHP 8.4, “Property Hooks” (Özellik Kancaları) gibi devrimsel bir özellikle kod yazma şeklimizi değiştirmişti. PHP 8.5 ise bu devrimi, dili daha güvenli, modern ve eksiksiz hale getiren “tip güvenliği” (type-safety) ve “geliştirici deneyimi” (DX) iyileştirmeleriyle devam ettiriyor.

İki sürüm arasındaki felsefe farkını ve geçişe değip değmeyeceğini anlamak için temel farklara bakalım.

🐘 Felsefe ve Ana Kimlik: 8.4 vs 8.5

İki sürümü tek bir cümleyle özetlemek gerekirse:

  • PHP 8.4 (Kasım 2024): Geliştirici ergonomisine odaklandı. En büyük özelliği olan Property Hooks ile “boilerplate” (tekrar eden) kod miktarını ciddi oranda azalttı.
  • PHP 8.5 (Kasım 2025): Modernizasyon ve tip güvenliğine odaklandı. En büyük özelliği olan Typed Class Constants (Tipli Sınıf Sabitleri) ile dilin en önemli eksiklerinden birini giderdi.

Her iki sürüm de PHP 9.0’a hazırlık yolunda önemli adımlardır, ancak odak noktaları farklıdır.


 

Karşılaştırmalı Özellik Tablosu: PHP 8.4 ve PHP 8.5

 

Aşağıdaki tablo, iki sürüm arasındaki en belirgin yenilik farklarını göstermektedir:

Kategori PHP 8.4 (Kasım 2024 Sürümü) PHP 8.5 (Kasım 2025 Sürümü)
Ana “Devrim” Özelliği Property Hooks (Özellik Kancaları) Typed Class Constants (Tipli Sınıf Sabitleri)
Tip Sistemi readonly iyileştirmeleri ve DOM* sınıfları için daha iyi tipler. Sınıf const tanımlamalarında artık string, int gibi tipler kullanılabiliyor. (Büyük gelişme)
Dizi Fonksiyonları array_sample() (Diziden rastgele eleman seçme) array_find() (Callback ile dizideki ilk eşleşmeyi bulma)
String Fonksiyonları (Bu alanda büyük bir yenilik yoktu) mb_str_pad() (Çoklu bayt desteği), str_increment() / str_decrement() (Alfanümerik artırma/azaltma)
Matematik (Bu alanda büyük bir yenilik yoktu) round() için “Bankacı Yuvarlaması” (ROUND_TIE_HALF_TO_EVEN) modu.
DateTime DateTime::createFromFormat() için ! olmadan katı ayrıştırma. DateTime::createFromTimestamp() (Daha temiz nesne oluşturma)
Kullanımdan Kaldırma (PHP 9 Hazırlığı) DateInterval ve DOM* sınıflarında bazı eski davranışlar. track_errors INI direktifi ve mb_convert_encoding‘in html-entities kullanımı.

 

Ana Farkların Detayları

1. “Devrimsel” Özellik: Property Hooks (8.4) vs. Typed Constants (8.5)

İki sürüm arasındaki en büyük fark budur.

PHP 8.4’ün Mirası: Property Hooks

PHP 8.4, get ve set bloklarını doğrudan sınıf özellikleri (property) içine gömmemizi sağladı. Bu, C# dilindekine benzer bir yapı olup, geleneksel __get / __set sihirli metotlarına veya getPropName() / setPropName() metotlarına olan ihtiyacı azalttı.

// PHP 8.4'ün getirdiği devrim
class User {
    public string $name {
        // Otomatik 'get' (sadece okuma)
        get; 
        
        // 'set' kancası ile veriyi işleme
        set (string $value) {
            $this->name = trim(strtoupper($value));
        }
    }
}

PHP 8.5’in Cevabı: Typed Class Constants

PHP 8.5 ise dilin temel bir eksiğini kapattı. Yıllardır public const VERSION = ‘1.0’; yazıyorduk ama bu sabitin bir string olduğunu PHP’ye belirtemiyorduk. PHP 8.5 ile bu artık mümkün:

// PHP 8.5'in getirdiği netlik
interface Config {
    // Artık tip güvenliği var
    public const string DEFAULT_DRIVER = 'mysql';
    public const int MAX_CONNECTIONS = 10;
}

Karşılaştırma: PHP 8.4’ün özelliği davranışsal bir yenilik getirirken, PHP 8.5’in özelliği yapısal bir güvenlik ve netlik getirdi.

2. Yardımcı Fonksiyonlar: array_sample (8.4) vs. array_find (8.5)

Her iki sürüm de dizi manipülasyonunu kolaylaştırdı, ancak farklı ihtiyaçlar için:

  • PHP 8.4 (array_sample()): Bir diziden rastgele bir veya birden fazla eleman çekmek için (array_rand‘in anahtarlar yerine değerleri döndüren hali) kullanışlıdır.
    $items = ['a', 'b', 'c', 'd'];
    $randomItem = array_sample($items); // örn: 'c'
    $twoRandom = array_sample($items, 2); // örn: ['b', 'd']
    
  • PHP 8.5 (array_find()): Bir dizide, belirli bir koşulu sağlayan ilk elemanı bulmak için kullanılır. array_filter kullanıp sonra reset() yapma kalıbını ortadan kaldırır.
    $users = [/* ... */];
    $admin = array_find($users, fn($user) => $user->isAdmin());
    // $admin: Koşulu sağlayan ilk User nesnesi veya null
    

3. String ve Matematik: 8.5 Öne Çıkıyor

PHP 8.4, string ve matematik fonksiyonları konusunda sessiz bir sürümdü. PHP 8.5 ise bu alanlardaki önemli eksikleri kapattı:

  • mb_str_pad() (8.5): str_pad fonksiyonunun Türkçe karakterler veya emojilerle ('ömer' gibi) düzgün çalışmamasını düzeltti.
  • Bankacı Yuvarlaması (8.5): Özellikle finansal yazılımlar için kritik olan, 2.5‘in 2‘ye, 3.5‘in 4‘e yuvarlandığı (HALF_TO_EVEN) modu round() fonksiyonuna ekledi.

Performans

Her yeni PHP sürümü gibi, hem 8.4 hem de 8.5, bir öncekine göre küçük performans iyileştirmeleri (opcode optimizasyonları, JIT geliştirmeleri, belirli fonksiyonların hızlandırılması) içerir.

Ancak, 8.4’ten 8.5’e geçişte “sitem %20 hızlandı” gibi devrimsel bir performans artışı beklenmemelidir. İki sürüm arasındaki performans farkı çoğu uygulama için ihmal edilebilir düzeydedir. Yükseltme kararı, performans değil, yeni özellikler ve güvenlik yamaları için verilmelidir.

Peki 8.4’ten 8.5’e Yükseltmeli mi?

Kesinlikle evet.

  • PHP 8.4, “Property Hooks” ile harika bir sürümdü ancak dilin temel eksiklerini (tipli sabitler gibi) çözmemişti.
  • PHP 8.5, 8.4’ün bıraktığı yerden devam ederek dili daha sağlam, daha güvenli ve daha eksiksiz hale getiriyor.

PHP 8.4’ten 8.5’e geçiş, 7.x’ten 8.0’a geçiş gibi “kırılgan” (breaking changes) bir geçiş değildir. Bu bir minör (küçük) sürüm yükseltmesidir.

Php 9.0
Php 9.0

Geçiş yaparken karşılaşacağınız tek zorluk, PHP 8.5’in “kullanımdan kaldırdığı” (deprecated) özelliklerdir (track_errors gibi). Kodunuz bu eski özellikleri kullanıyorsa, testlerinizde E_DEPRECATED uyarıları göreceksiniz. Bu uyarıları düzeltmek sizi PHP 9.0’a hazırlayacaktır.

Özetle; PHP 8.5’e geçiş yapmak, 8.4’ün getirdiği tüm yenilikleri korurken, üzerine daha fazla güvenlik, netlik ve kullanışlı araçlar eklemek anlamına gelir.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz