Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: PHP 8.4’te Tip Güvenli Koleksiyonlar: Dizilerin Sahip Olmasını İstediğim Özellikler
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » PHP 8.4’te Tip Güvenli Koleksiyonlar: Dizilerin Sahip Olmasını İstediğim Özellikler

Yazılım

PHP 8.4’te Tip Güvenli Koleksiyonlar: Dizilerin Sahip Olmasını İstediğim Özellikler

teknomers
Son güncelleme: 26 Nisan 2026 04:10
teknomers
Paylaş
Paylaş

Günlük Acı

Aşağıdaki kod dizisi, muhtemelen tanıdık bir manzarayı yansıtıyor:

$activeAdmins = array_values(
            array_filter(
                array_map(fn($u) => $u->refresh(), $users),
                fn($u) => $u->isActive() && $u->isAdmin()
            )
        );

Bu kod dizesinde üç temel sorun var:

1. Okuma sırası, yürütme sırasıyla çatışıyor. Kodda array_values ifadesine göz atıyorsunuz ama bu, en son çalışıyor. Bu durum, kodu her zaman ters yönde çözmenize neden oluyor.

2. Türler çöküyor. array_filter, array gibi bir tür dönerken, array_values da benzer bir tür döner. Bir User|Customer birleşimiyle zor bir senaryoya girdiğinizde PHPStan sorun yaşamaya başlıyor.

3. Anahtarlar, PHP dizilerinde tam anlamıyla işlenmez. PHP dizileri, anahtarların üzgün bir taklidi ile çalışır:

$a = ['1' => 'a'];
        var_dump(array_keys($a)); // [0 => int(1)], "1" artık bir int
        $b = [true => 'x', 1 => 'y'];
        count($b); // 1 - true ve 1 çakışıyor
        $c = [];
        $c[$someUser] = 'admin'; // Fatal error: Illegal offset type
        

Bu sorunların üzerinden geçerek PHP ile nasıl daha verimli çalışabileceğimize bakalım.

Ne Yaptım

Geliştirdiğim çözüm, üç gerçek tür: List, Set ve Map. Her birinin değiştirilebilir, değiştirilemez ve tembel (lazy) sürümleri mevcut. Bütün yöntemlere akan tam generikler ile yapılan bir yapıdır. Uygulamalar, arayüzlerin arkasında gizlenmiştir, bu nedenle dahili yapıları değiştirmek son derece kolaydır.

Aynı kodu aşağıdaki şekilde yeniden yazabiliriz:

$activeAdmins = listOf($users)
            ->map(fn(User $u) => $u->refresh())
            ->filter(fn(User $u) => $u->isActive() && $u->isAdmin());

Bu çözüm, kodun okunabilirliğini artırır. Kod, yukarıdan aşağıya doğru okunabilir ve PHPStan, ImmutableList türünü araya sokar. Eğer map() eleman türünü daraltmış olsaydı, bu daralma da propogasyona tabi olacaktı.

Diğer Kütüphanelerden Beklemediğiniz Şeyler

Değiştirilebilir ve değiştirilemez tür ayrımı, bayrak değil, ayrı türlerdir.

MutableList::add() metodu $this dönerken, ImmutableList::add()yeni bir örnek döner ve #[NoDiscard] ile işaretlenir; bu da PHP 8.5’te gerçek bir uyarı haline gelir. “Eklendi” elemanınızın boşluğa atılmasını artık engellemiş olursunuz.

Map görünüm (views) canlı koleksiyonlardır.

$map->keys, $map->values, ve $map->entries gerçek Set ve List örnekleri olarak işleyen, aynı alt yapıyı paylaşan yapılardır. Belleği paylaşır ve tam koleksiyon API’sine sahiptirler. Böylece $map->values->sum() ve $map->keys->sorted() direkt çalışır.

Deneme

composer require noctud/collection
        

Varsayılan pin (^0.1.1), sizi yalnızca 0.1.x yamanlarına yönlendirir. BC kırılmaları 0.2 sürümü ile gelir ve composer otomatik olarak bunları yüklemez, bu yüzden bu şekilde kilitlemek 0.x döngüsü boyunca güvenceli olacaktır.

Belgeler ve örnekler: https://noctud.dev
GitHub: https://github.com/noctud/collection

This version maintains the structure and important technical components of the original article while translating it for Turkish developers with respect for the important rules provided.

Contents
  • Günlük Acı
  • Ne Yaptım
  • Diğer Kütüphanelerden Beklemediğiniz Şeyler
  • Deneme

Kaynak: Orijinal Makale

Rust için Laravel benzeri bir Web Framework’u Geliştirdim
İçerik Yayınlamayı Kolaylaştırma: Dev.to ile Filament Entegrasyonu
MrCatz DataTable (Livewire) ile Dakikalar İçinde Laravel Admin CRUD Oluşturma
Laravel AI SDK ile ReAct Sohbet Ajanı Geliştirme
API Artisan’ın İpuçları: Kullanıcıların Gerçekten Tercih Ettiği Laravel API’lerini Oluşturma
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Kamerayı Değiştirerek Crimson Desert Deneyimini Yenileyin
Sonraki Makale QuotigyDash: Laravel 11 ile Geliştirilmiş Kendinize Ait Faturalama Çözümü

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Pentagon, Dialog Veri Sızıntısını Ulusal Güvenlik İçin Araştırıyor
Genel
Eufy Floodlight Güvenlik Kamerası Fiyatı Şimdi Daha Uygun!
Genel
Apple, 2027 için M7 çipleri hızlandıracak, M6 çıkabilir
Donanım
Geliştirici Günlüğü: 2026-06-26 — Yapılandırma Odaklı Faturalama, Uygulama Genelinde Yeniden Markalaşma ve Markalı Hata Sayfaları
Yazılım
2026 Amazon Prime Günü: Bose Kulaklıklarımın Kesin Alışverişi!
Genel
Framework Laptop 13 Pro fiyatı düştü, CPU artışı kapıda
Donanım
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?