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.5’in Pipe Operatörü ve Laravel Koleksiyonları: Piper Nerede Uygun, Nerede Uygun Değil
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.5’in Pipe Operatörü ve Laravel Koleksiyonları: Piper Nerede Uygun, Nerede Uygun Değil

Yazılım

PHP 8.5’in Pipe Operatörü ve Laravel Koleksiyonları: Piper Nerede Uygun, Nerede Uygun Değil

teknomers
Son güncelleme: 24 Haziran 2026 10:59
teknomers
Paylaş
Paylaş

Kaynak: hafiz.dev


PHP 8.5, Kasım ayında pipe operatorünü tanıttı, ancak çoğu Laravel geliştiricisi bunu pek umursamadı. |> neden önemli ki? collect()->filter()->map() kullanımı on yıldır yukarıdan aşağı okunabiliyorken bu göze çarpmaz. Laravel’deki zincirleme dönüşümler zaten sorunu çözmüş durumda.

Spatie geçen ay Piper’ı yayımladı: Laravel’in koleksiyon ve string yardımcılarını, specifically pipe operatorü için tasarlanmış bağımsız fonksiyonlar olarak sunan bir kütüphane. 300’den fazla Laravel paketi yöneten bir takım, pipe operatorünün Laravel tarzı bir araç takımına ihtiyaç duyduğunu düşünüyorsa, artık bu konu akademik bir tartışma olmaktan çıkıyor. Gerçekten $array |> filter(...) |> map(... yazmak için bir neden var mı? Koleksiyonları kullanmak yerine?

Paket üzerinde inceledim, tasarım kararlarını ve her yaklaşımın gerçekten nasıl faydalar sağladığını araştırdım. Kısa cevap: Piper, Koleksiyonların yerini alan bir araç değil. Ancak, iki özel durumda daha iyi bir araç ve her şeyden önce tarz girmeden önce her şeyi belirleyen bir zorunluluk var.

<h2><a name="a-60second-pipe-operator-refresher" href="#a-60second-pipe-operator-refresher"></a>Pipe Operatorü Hakkında Kısa Bir Hatırlatma</h2>
<p>Pipe operatorü, sol ifadenin sonucunu alır ve sağdaki callable'a tek argüman olarak geçirir:</p>
<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="nv">$result</span> <span class="o">=</span> <span class="s1">'  laravel  '</span>
<span class="o">|&gt;</span> <span class="nb">trim</span><span class="p">(</span><span class="mf">...</span><span class="p">)</span>
<span class="o">|&gt;</span> <span class="nb">strtoupper</span><span class="p">(</span><span class="mf">...</span><span class="p">);</span>

// “LARAVEL”

Her adım, icra sırasına göre yukarıdan aşağı okunur; iç içe geçme yok, ara değişkenler yok. (...) sözdizimi PHP 8.1’in birinci sınıf callable notasyonudur.

İşin aslı: sağ kısım, tam olarak bir argüman kabul eden bir callable olmalıdır. PHP’nin standart kütüphanesi ise buna göre tasarlanmamıştır. Argüman sıralamaları tutarsızdır (array_map($callback, $array) ancak array_filter($array, $callback)), bu nedenle yarıdan fazlası ok işlevlerinin etrafında ok işlevleri ile sarılmalı. Bu sürtünmeye tam olarak Piper giriyor.

<h2><a name="what-piper-actually-does" href="#what-piper-actually-does"></a>Piper Neler Yapar?</h2>
<p>Piper (v1.0, PHP 8.5 gerektirir), Laravel'in dizi ve string yardımcılarını <code>Spatie\Piper\Arr</code> ve <code>Spatie\Piper\Str</code> altında isimlendirilmiş fonksiyonlar olarak sunar. Tasarım hilesi: her fonksiyon bir üst düzey fonksiyondur. <code>filter(fn ($i) =&gt; $i % 2 === 0)</code> ifadesi hiçbir şeyi filtrelemez. Tek bir değeri bekleyen bir kapanışı döndürür:</p>
<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kn">use</span> <span class="k">function</span> <span class="nn">Spatie\Piper\Arr\</span><span class="p">{</span><span class="n">filter</span><span class="p">,</span> <span class="n">map</span><span class="p">,</span> <span class="n">join</span><span class="p">};</span>

use function Spatie\Piper\Str\{prefix, suffix};

$summary = [1,2,3,4,5,6]
|> filter(fn (int $i) => $i % 2 === 0)
|> map(fn (int $i) => $i   2)
|> join(‘, ‘, ‘, and ‘)
|> prefix(‘Kazanan numaralar şunlardır: ‘)
|> suffix(<span class=”s1′>’.’);

// “Kazanan numaralar şunlardır: 4, 16, ve 36.”

Şunun farkına varın: collect() kullanımı yok, ->all() veya ->toString() çıkışı yok. Sadece düz diziler ve stringler düz fonksiyonlar aracılığıyla akıyor. Tüm felsefe bu.

<h2><a name="where-piper-beats-collections" href="#where-piper-beats-collections"></a>Piper'ın Koleksiyonlara Üstün Olduğu Durumlar</h2>
<p><strong>Yerel değerler girer, yerel değerler çıkar.</strong> Koleksiyonlar bir sarmalayıcı nesnedir. Her sınırda bir dönüşüm görürsünüz: <code>collect($array)</code> ile başlarsınız, <code>-&gt;all()</code> ile çıkarsınız ve her yöntem yeni bir Koleksiyon örneği döndürür. Uygulama kodunda bunu pek fark etmezsiniz. Ancak, düz diziler bekleyen (üçüncü parti SDK'lar, dizi-typed imzalar, JSON sınırları) herhangi bir şeyle etkileşimde bulunurken, sarmalama ve sarmalayıcıdan çıkarma gereksinimi yalnızca bir merasimdir. Piper tamamen bunu atlar: her fonksiyon bir dizi alır, bir dizi döndürür.</p>

<p><strong>Kendi fonksiyonlarınızı zincir içine karıştırma.</strong> Bu, pipe operatorünün yapısal avantajıdır ve Koleksiyonların kolayca yapamadığı bir şeydir. Bir Koleksiyon zinciri yalnızca Koleksiyon sınıfında bulunan yöntemleri (veya küresel olarak kaydettiklerinizi) çağırabilir. Bir pipe zinciri, <em>herhangi bir</em> callable'ı kabul eder: Piper yardımcıları, yerel fonksiyonlar, kendi alanınıza özgü fonksiyonlar, hepsi bir akışta:</p>
<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kn">use</span> <span class="k">function</span> <span class="nn">Spatie\Piper\Arr\</span><span class="p">{</span><span class="n">filter</span><span class="p">,</span> <span class="n">map</span><span class="p">};</span>

$total = $orders
|> filter(fn (Order $o) => $o->isPaid())
|> map(fn (Order $o) => $o->total)
|> array_sum(…)
|> $this->applyDiscount(…);

Koleksiyonlarla, applyDiscount() ya bir makro olur, ya ->pipe() çağrısı olur ya da bir değişkende zincirden çıkar. Pipe operatorü, fonksiyonlarınızı birinci sınıf zincir vatandaşları olarak değerlendirir.

Hiçbir framework bağımlılığı. Piper’ın fonksiyonları, Illuminate paketlerine gerek duymadan bağımsızdır. Laravel tarzı ergonomi sunmak isteyen paket yazarları için bu, önemli bir satış noktasıdır.

<h2><a name="where-collections-still-win" href="#where-collections-still-win"></a>Koleksiyonların Hala Üstün Olduğu Alanlar</h2>
<p><strong>API yüzeyi.</strong> Piper v1, en çok kullanılan yardımcıları getiriyor. Koleksiyonlar 100’den fazla yöntemi on yıldır rafine ediyor: <code>groupBy()</code>, <code>pluck()</code> dot gösterimi ile, <code>chunk()</code>, <code>zip()</code>, <code>mapWithKeys()</code>, yüksek düzey mesajları gibi <code>-&gt;map-&gt;title</code>, ve daha fazlası. Dönüşüm ihtiyaçlarınızdan biri daha derin bir yöntemi gerektirdiğinde, tekrar <code>collect()</code> bölgesine dönersiniz ve iki farklı tarzda bir pipeline ayırmak, yalnızca hangisini seçeceğinizden daha kötü bir durumdur.</p>
<p><strong>Lazy değerlendirme.</strong> <code>LazyCollection</code>, büyük veri setlerini (cursor sonuçları, büyük dosyalar) birer birer sabit bellek ile işler. Piper’ın lazy hikayesi yoktur: zincirdeki her fonksiyon tam yeni bir dizi yaratır. Daha önce <a href="https://hafiz.dev/blog/laravel-query-optimization-from-3-seconds-to-30ms" target="_blank" rel="noopener noreferrer">optimize ettiğiniz sorgu sonuçlarında</a>, 100.000 satırda beş Piper fonksiyonu zincirlemek, beş ara dizi tahsis eder.</p>
<p><strong>Eloquent entegrasyonu.</strong> Sorgu oluşturucular Koleksiyonlar döner. İlişkilerin döndürdüğü de Koleksiyonlardır. Her Laravel API size zaten bir Koleksiyon sunar. Sadece Piper üzerinden geçmek için düz bir diziye dönüştürmek, tüm framework’e karşı yüzmek demektir.</p>
<p><strong>Keşfedilebilirlik.</strong> Bir Koleksiyonun ardında <code>-&gt;</code> yazdığınızda IDE'niz, mevcut her yöntemi listeleyecektir. Piper’da, fonksiyonun var olduğunu bilmeniz, onu içe aktarmanız ve <code>use function</code> bloğunuzu düzenli tutmanız gerekir. Bu küçük bir ücret, ancak her dosyada ödenir.</p>

<h2><a name="the-constraint-that-decides-everything" href="#the-constraint-that-decides-everything"></a>Her Şeyi Belirleyen Zorunluluk</h2>
<p>Piper, PHP 8.5 gerektirir. Bu bir stil tasarımı değil, sert bir engeldir. PHP 8.5 Kasım 2025’te piyasaya sürüldü ve gördüğüm çoğu üretim filosu hâlâ 8.2 ile 8.4 arasında. Sunucularınız 8.5'te değilse, bu tartışma tamamen teoriktir ve bu, bugün üretimde bulunan Laravel uygulamalarının çoğunluğunu kapsadığını tahmin ediyorum. Bu gecikme kalıbı hakkında daha önce yazdım: <a href="https://hafiz.dev/blog/php-8-4-features-not-using-yet-laravel-app" target="_blank" rel="noopener noreferrer">PHP 8.4 özellikleri, çoğu kod tabanı için bir yıl boyunca henüz "yeni" idi.</a></p>
<p>Adoption konusunda dikkat edilmesi gereken ikinci bir durum: AI kodlama asistanları. Piper'ı inşa eden Sebastian De Deyne, kodlama araçlarının genellikle pipe operator kodunu üretmediğini gözlemlemiştir. Eğitim verileri, on yılı aşkın bir süredir <code>collect()</code> zincirlerini içerirken, <code>|&gt;</code> ile çok az örnek vardır. 2026 yılında, aracınızın varsayılan olarak hedef almadığı bir sözdizimi yavaş yayılmakta, bu da erdemine bakılmaksızın.</p>

<h2><a name="my-take" href="#my-take"></a>Kendi Görüşüm</h2>
<p>Piper’ı framework-bağımsız kod (paketler, paylaşılan kütüphaneler) veya koleksiyonların aşırı geldiği durumlarda yerel diziler ve stringler üzerinde dönüşümler yoğun olan kod yazarken kullanın. Fonksiyon karıştırma yeteneği, pipe operatorünün yapısal olarak zincirleme yöntemlerinden daha iyi olduğu tek yerdir; sadece farklı değil. Buna aynı tür <a href="https://hafiz.dev/blog/laravel-service-action-job-decision-tree" target="_blank" rel="noopener noreferrer">hizmetler ve eylemler arasında seçim yapmak için uyguladığım karar ağacı düşüncesi.</a>: kod bağlamına göre seçin, en yeni olanla değil.</p>
<p>Bir Laravel uygulamasının içinde, Koleksiyonlar kullanmaya devam edin. Her yerde varlar, ekibiniz bunları biliyor, Eloquent size bunları sunuyor ve lazy varyant ölçek sorunlarıyla başa çıkıyor. Piper, onları tahtından indirmeyi amaçlamıyor; Laravel projeleri arasındaki kodlar için bir boşluğu dolduruyor. Spatie, paketleri genellikle ekosistem adapte olana kadar birkaç yıl önce yayımlama alışkanlığına sahiptir (<a href="https://hafiz.dev/blog/scotty-vs-laravel-envoy-spatie-deploy-tool" target="_blank" rel="noopener noreferrer">Scotty, bu konuda dağıtım için böyle bir yol izledi</a>), ve Piper, 2028’e kadar PHP kod tarzının nerede biteceğine dair bir bahis gibi görünüyor; bu sprintte benimsenmesi gereken bir araç değil.</p>

<h2><a name="faq" href="#faq"></a>Sıkça Sorulan Sorular</h2>
<p><strong>Piper, Laravel Koleksiyonlarının yerini alır mı?</strong></p>
<p>Hayır, Spatie bunu böyle konumlandırmıyor. Piper, yerel değerler üzerinde dizi ve string dönüşümlerini kapsar. Koleksiyonlar, daha zengin, framework entegre bir araç olmaya devam ediyor. Piper, Koleksiyonların tuhaf olduğu yerler için bir yardımcı olarak düşünülmelidir, bir halef değil.</p>
<p><strong>Pipe operatorünü Koleksiyonlarla doğrudan kullanabilir miyim?</strong></p>
<p>Manalı bir şekilde değil. Koleksiyonlar, zincirleme yöntemlere sahip nesnelerdir ve pipe operatorü tek argümanlı callable'lar ister. Düz bir Koleksiyon kullanmak için <code>collect(...)</code> içerisine pipe etmek mümkündür fakat bu durumda Koleksiyon zincirini kullanmak daha mantıklıdır.</p>
<p><strong>Pipe operatorü, Koleksiyon zincirlemesinden daha iyi performans gösterir mi?</strong></p>
<p>Teorik olarak, biraz; düz fonksiyon çağrıları nesne yöntem dağıtımını ve adım başına Koleksiyon oluşturmayı atlar. Pratikte, fark veri tabanı sorgularınıza göre sesli gelir. Performans için herhangi bir yaklaşımı seçmeyin; okunabilirlik ve bağlama göre seçin.</p>
<p><strong>Piper'ı Laravel 13'te kullanabilir miyim?</strong></p>
<p>Evet, PHP 8.5 veya daha üstü bir runtime ile. Paket, hiçbir çerçeve bağımlılığına sahip değildir, bu nedenle PHP 8.5 projesinde, Laravel'de veya başka bir yerde çalışır. Önemli olan sürüm kontrolü, PHP bininizdir, Laravel sürümünüz değil.</p>
<p><strong>Stringable için string zincirleri konusunda ne olacak?</strong></p>
<p>Laravel'in <code>Str::of()</code> akıcı stringleri, bir Laravel uygulaması içinde <code>Spatie\Piper\Str</code> ile aynı alanları kapsar, Koleksiyonlarla benzer ticaret noktası ile: sarmalayıcı nesne, framework bağımlılığı, büyük API. Aynı mantık uygulanır: uygulama kodunda Stringable kullanın, framework-bağımsız kodda Piper kullanın.</p>

<h2><a name="wrapping-up" href="#wrapping-up"></a>Sonuç</h2>
<p>Pipe operatorü son yıllarda PHP sözdizimini etkileyen en ilginç şeydir ve Piper, Laravel kullanıcıları için bunun ergonomik hale getirilmesinde ilk ciddi girişimdir. Ancak ilginç olmak, gerekli olmanın aynı şeyleri temsil etmez. Üretim PHP’niz 8.5 ise ve paket kodu yazıyorsanız veya framework sınırlarında yerel dizilerle çalışıyorsanız, Piper, composer.json’unuza dahil edilmelidir. Diğer her şey için, <code>collect()</code> gitmeyecek.</p>
<p>Bir Laravel kod tabanını modernize ediyorsanız ve hangi PHP 8.5 özelliklerinin gerçekten benimsenmesi gerektiği konusunda tereddüt yaşıyorsanız, <a href="mailto:[email protected]">görüşelim.</a></p>

Kaynak: Orijinal Makale

WebSocket Olmadan Bildirimler: Uygulama İçi Merkez ve Paylaşımlı Hosting Üzerinde Yayınlar
PHP’nin Doğum Günü Kutlu Olsun!
%50 Büyüme Kodu: İlk UK Laravel Uygulamamın JDM Dağıtıcılarını Nasıl Dönüştürdüğü
Laravel Kimlik Doğrulama: 4 Yıllık Deneyimden Elde Edilen Bazı Gözlemler
CodeIgniter ve Laravel: İnsan Odaklı Bir Karşılaştırma
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale 2026 Prime Day: Kaçırılmayacak MacBook Fırsatları!
Sonraki Makale Acil: Cisco Unified CM Açığı Kök Düzeyine Yazım Yolu Sızdırdı

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Ücretsiz Radeon RX 9070 XT ile AMD’nin Heyecan Verici Teknoloji Fırsatları
Oyun
Dyson PencilWash Prime Günü’nde Tarihinin En Uygun Fiyatında
Liste
Acil: KongTuke ile İlişkili Gizli Backdoor Tehlikesi!
Siber Güvenlik
Açık Kaynak CRM’i AI Tabanlı Hale Getirmek (Laravel/AI Üretimde)
Yazılım
BenQ 4100i: Sinema Deneyimini Evinize Taşıyan Projeksiyon Cihazı!
Genel
GTA VI için Fiyat Etiketi Nihayet Belirlendi
Liste
//

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?