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: Açık Kapalı Prensibi (OCP) – DEV Community
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 » Açık Kapalı Prensibi (OCP) – DEV Community

Yazılım

Açık Kapalı Prensibi (OCP) – DEV Community

teknomers
Son güncelleme: 2 Temmuz 2026 13:07
teknomers
Paylaş
Paylaş

Open-closed principle (OCP), yazılım varlıklarının genişlemeye açık, ancak değiştirmeye kapalı olduğunu belirtir; yani, böyle bir varlık, kaynak kodunu değiştirmeden davranışının genişletilmesine olanak tanımalıdır.

<p><strong>Basitçe şöyle ifade edebiliriz:</strong> Mevcut kodu değiştirmeden yeni özellikler ekleyebilmelisiniz.</p>

<p><strong>Önemi:</strong></p>

<ul>
    <li>Genişletilebilirlik: Yeni özellikler mevcut kodu değiştirmeden eklenebilir.</li>
    <li>Kararlılık: Değişiklikler yaparken hata olasılığını azaltır.</li>
</ul>

<h2>- Esneklik: Değişen gereksinimlere daha kolay uyum sağlar.</h2>

<h2>Gerçek Dünya Örneği: Evdeki elektrik prizi.</h2>

<ul>
    <li>Değişikliklere Kapalı: Priz, duvarın arkasına kalıcı olarak bağlanmıştır. Her yeni cihaz aldığınızda duvarı yıkmaz, evin kablolarını değiştirmezsiniz.</li>
    <li>Genişlemeye Açık: Priz, standart bir arayüz (priz delikleri) sunar. Telefon şarj cihazı, elektrik süpürgesi, tost makinesi veya televizyonu takabilirsiniz.</li>
</ul>

<p>Priz, içine ne tür bir cihaz takıldığını önceden bilmek zorunda değildir. Standart prize uyan herhangi bir cihazı çalıştırmaya açıktır.</p>

<p>Bir çevrimiçi mağaza yönettiğinizi ve farklı kargo yöntemleri için gönderim maliyetlerini hesaplamanız gerektiğini hayal edin.</p>

<h3>❌ Yanlış Yöntem: Mevcut sınıfı değiştirmek (OCP'yi İhlal Eder)</h3>

<p>Şirketiniz yeni bir kargo firması (DHL veya FedEx gibi) sunmaya karar verdiğinde, mevcut dosyayı açıp bir if/else bloğu daha eklemeniz gerekecek.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">class</span> <span class="nc">ShippingCostCalculator</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">calculate</span><span class="p">(</span><span class="nv">$weight</span><span class="p">,</span> <span class="nv">$carrier</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">if</span> <span class="p">(</span><span class="nv">$carrier</span> <span class="o">===</span> <span class="s1">'FedEx'</span><span class="p">)</span> <span class="p">{</span>
                <span class="k">return</span> <span class="nv">$weight</span> <span class="o">*</span> <span class="mf">1.5</span><span class="p">;</span>
            <span class="p">}</span> <span class="k">elseif</span> <span class="p">(</span><span class="nv">$carrier</span> <span class="o">===</span> <span class="s1">'UPS'</span><span class="p">)</span> <span class="p">{</span>
                <span class="k">return</span> <span class="nv">$weight</span> <span class="o">*</span> <span class="mf">1.2</span><span class="p">;</span>
            <span class="p">}</span>
            <span class="c1">// ❌ Yarın DHL eklemek istiyorsanız, bu dosyayı değiştirmelisiniz.</span>
            <span class="c1">// Bir yazım hatası yaparsanız, FedEx ve UPS kargo hesaplamalarını bozarsınız.</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<h3>✅ Doğru Yöntem: Değiştirmeden Genişletmek (OCP'ye Uyar)</h3>

<p>Büyük bir sınıfın tüm kararları almasını sağlamak yerine, standart bir sözleşme (Interface) oluştururuz. Ana hesaplayıcı değişikliğe kapalı kalır, ancak sisteme yeni dosyalar ekleyerek genişletmeye açıktır.</p>

<h4>Adım 1: Standart "Outlet" (Interface) Oluşturun</h4>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">interface</span> <span class="nc">ShippingRate</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">getRate</span><span class="p">(</span><span class="kt">float</span> <span class="nv">$weight</span><span class="p">):</span> <span class="kt">float</span><span class="p">;</span>
    <span class="p">}</span>
    </code></pre>
</div>

<h4>Adım 2: "Cihazların" Oluşturulması (Yeni Özellikleri Eklemek)</h4>

<p>Yeni bir taşıyıcı eklemek için tamamen ayrı, izole bir sınıf dosyası oluştursunuz.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">class</span> <span class="nc">FedExShipping</span> <span class="kd">implements</span> <span class="nc">ShippingRate</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">getRate</span><span class="p">(</span><span class="kt">float</span> <span class="nv">$weight</span><span class="p">):</span> <span class="kt">float</span><span class="p">{</span>
            <span class="k">return</span> <span class="nv">$weight</span> <span class="o">*</span> <span class="mf">1.5</span><span class="p">;</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">class</span> <span class="nc">UpsShipping</span> <span class="kd">implements</span> <span class="nc">ShippingRate</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">getRate</span><span class="p">(</span><span class="kt">float</span> <span class="nv">$weight</span><span class="p">):</span> <span class="kt">float</span><span class="p">{</span>
            <span class="k">return</span> <span class="nv">$weight</span> <span class="o">*</span> <span class="mf">1.2</span><span class="p">;</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="c1">// DHL eklemek mi istiyorsunuz? Yeni bir dosya oluşturun! FedEx veya UPS'i değiştirmeye gerek yok.</span>
    <span class="kd">class</span> <span class="nc">DhlShipping</span> <span class="kd">implements</span> <span class="nc">ShippingRate</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">getRate</span><span class="p">(</span><span class="kt">float</span> <span class="nv">$weight</span><span class="p">):</span> <span class="kt">float</span><span class="p">{</span>
            <span class="k">return</span> <span class="nv">$weight</span> <span class="o">*</span> <span class="mf">2.0</span><span class="p">;</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<h4>Adım 3: Sistemi Güvenli Çalıştırın</h4>

<p>Temel mantık, şirketinize eklediğiniz taşıyıcı sayısına bağlı olmaksızın asla değişmez.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">class</span> <span class="nc">ShippingCostCalculator</span> <span class="p">{</span>
        <span class="c1">// Bu yöntem DEĞİŞTİRMEYE KAPALI. Belirli markalarla ilgisi yok.</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">calculate</span><span class="p">(</span><span class="kt">float</span> <span class="nv">$weight</span><span class="p">,</span> <span class="kt">ShippingRate</span> <span class="nv">$shippingMethod</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">return</span> <span class="nv">$shippingMethod</span><span class="o">-&gt;</span><span class="nf">getRate</span><span class="p">(</span><span class="nv">$weight</span><span class="p">);</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<hr/>

<h3>Bunu Neden Yapmalısınız?</h3>

<ul>
    <li>Genişletilebilirlik: Yeni özellikler mevcut kodu değiştirmeden eklenebilir.</li>
    <li>Kararlılık: Değişiklik yaparken hata olasılığını azaltır.</li>
    <li>Esneklik: Değişen gereksinimlere daha kolay uyum sağlar.</li>
    <li>Takım İşbirliği: Farklı geliştiriciler aynı anda farklı kargo yöntemleri üzerinde çalışabilir, aynı dosyayı düzenlemeden kod çakışmalarını önler.</li>
</ul>

<hr/>

<h2>En Önemli Üç Karışıklık</h2>

<h3>1. Karışıklık: "Değişikliklere Kapalı, bu dosyayı bir daha asla açamıyorum demek mi?"</h3>

<ul>
    <li>Gerçek: Hayır. "Kapalı" mevcut özelliklerde davranış değişikliklerine veya yeni gereksinimler tarafından yönlendirilen değişikliklere kapalı demektir. Sınıfta bir hata bulursanız, kesinlikle dosyayı açıp düzeltmelisiniz.</li>
</ul>

<h3>2. Karışıklık: "Her bir sınıf için bir arayüz oluşturmalı mıyım?"</h3>

<ul>
    <li>Gerçek: Bu, performans ve okunabilirliği öldüren birinci hata. Eğer bir sınıfın yalnızca bir uygulaması varsa ve bu uygulanma asla değişmeyecekse (örneğin, yalnızca PDF oluşturan bir PdfGenerator), bir arayüz oluşturmamalısınız. Sadece değişiklik beklenen yerlerde arayüzleri kullanın.</li>
</ul>

<h3>3. Karışıklık: "OCP benim geleceği tahmin etmemi gerektiriyor mu?"</h3>

<ul>
    <li>Gerçek: Müşterinizin iki yıl içinde ne isteyeceğini tahmin edemezsiniz. OCP, geleceği tahmin etmekle ilgili değildir; kodun gelecekte bir şey olduğunda kolayca eklenebilmesi için yapılandırılmasıyla ilgilidir.</li>
</ul>

<hr/>

<h2>Anti-Model vs OCP Çözümü</h2>

<h3>❌ %90 Yaklaşımı: Mevcut sınıfı değiştirmek (OCP'yi İhlal Eder)</h3>

<p>Her seferinde bir yönetici yeni bir ödeme ağ geçidi talep ettiğinde, mühendis bu sınıfı açar ve bir elseif ekler. Bir yazım hatası checkout sistemini tamamen çökertir.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">class</span> <span class="nc">PaymentProcessor</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">process</span><span class="p">(</span><span class="nv">$amount</span><span class="p">,</span> <span class="nv">$type</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">if</span> <span class="p">(</span><span class="nv">$type</span> <span class="o">===</span> <span class="s1">'paypal'</span><span class="p">)</span> <span class="p">{</span>
                <span class="c1">// PayPal mantığı</span>
            <span class="p">}</span> <span class="k">elseif</span> <span class="p">(</span><span class="nv">$type</span> <span class="o">===</span> <span class="s1">'stripe'</span><span class="p">)</span> <span class="p">{</span>
                <span class="c1">// Stripe mantığı</span>
            <span class="p">}</span> <span class="k">elseif</span> <span class="p">(</span><span class="nv">$type</span> <span class="o">===</span> <span class="s1">'crypto'</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// ❌ Bunu eklemek için bu dosyayı değiştirmeliydim!</span>
                <span class="c1">// Kripto mantığı</span>
            <span class="p">}</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<h3>📈 %10 Yaklaşımı: Polimorfizm Kullanımı (OCP'ye Uyar)</h3>

<p>Bir sözleşme (Interface) oluşturuyoruz. Ana işlemci hiçbir zaman değişmeyecek, ne kadar ödeme geçidi eklersek ekleyelim.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">interface</span> <span class="nc">PaymentGateway</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">pay</span><span class="p">(</span><span class="nv">$amount</span><span class="p">);</span>
    <span class="p">}</span>

    <span class="c1">// Temel mantık artık DEĞİŞTİRMEYE KAPALI</span>
    <span class="kd">class</span> <span class="nc">PaymentProcessor</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">process</span><span class="p">(</span><span class="nv">$amount</span><span class="p">,</span> <span class="kt">PaymentGateway</span> <span class="nv">$gateway</span><span class="p">)</span> <span class="p">{</span>
            <span class="nv">$gateway</span><span class="o">-&gt;</span><span class="nf">pay</span><span class="p">(</span><span class="nv">$amount</span><span class="p">);</span> <span class="c1">// Dinamik yürütme</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="c1">// Genişlemeye AÇIK: Yeni bir sınıf dosyası ekleyin!</span>
    <span class="kd">class</span> <span class="nc">StripeGateway</span> <span class="kd">implements</span> <span class="nc">PaymentGateway</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">pay</span><span class="p">(</span><span class="nv">$amount</span><span class="p">)</span> <span class="p">{</span> <span class="cm">/* Stripe mantığı */</span> <span class="p">}</span>
    <span class="p">}</span>
    <span class="kd">class</span> <span class="nc">CryptoGateway</span> <span class="kd">implements</span> <span class="nc">PaymentGateway</span> <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">pay</span><span class="p">(</span><span class="nv">$amount</span><span class="p">)</span> <span class="p">{</span> <span class="cm">/* Kripto mantığı */</span> <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<hr/>

<h2>Üç Adımlı Karar Matrisi (Nasıl Seçilir)</h2>

<p>Bir PHP sınıfı yazarken veya incelerken, OCP uygulayıp uygulamayacağınıza karar vermek için bu zihinsel haritayı kullanın:</p>

<div class="highlight js-code-highlight">
    <pre class="highlight shell"><code>  START OCP_Design_Check

IF Is_Writing_Conditional_Statement IS True THEN

    IF Conditions_Likely_To_Grow_In_Future IS True THEN
        EXECUTE Apply_OCP_Use_An_Interface
    ELSE
        EXECUTE Simple_If_Else_Is_Fine
    END IF

ELSE
    EXECUTE Leave_It_Alone
END IF

END OCP_Design_Check

<ol>
    <li>Türün bir varyasyonu mu? Eğer "tipler" (kullanıcı_tipi, ödeme_yöntemi, rapor_formatı, dışa aktarma_hedefi) bazında şartlar yazıyorsanız, OCP için önemli bir adaydır. Bu türleri ayrı sınıflar haline getirip bir arayüzü uygulayın.</li>
    <li>Basit bir ikili durum mu? Eğer <code>if ($user->isActive)</code> kontrolü yapıyorsanız, bunu olduğu gibi bırakın. AktifKullanıcı ve PasifKullanıcı sınıfları oluşturmayın. Bu aşırı mühendislik.</li>
    <li>"Üç Vuruş" Kuralı: Özelliğin genişleyip genişlemeyeceğinden emin değilseniz, tahmin etmeyin. Önce basit bir if/else yazın. İkinci seferde değiştirdiğinizde, bırakın. Üçüncü seferde dosyayı açıp başka bir koşul ekliyorsanız, onu hemen OCP doğrultusunda yeniden yapılandırın.</li>
</ol>

<hr/>

<h2>Karar Verme İçin Özet</h2>

<ul>
    <li>Yalnızca hataları düzeltmek veya mevcut mantığı optimize etmek için kodu değiştirin.</li>
    <li>Tamamen yeni iş kuralları veya özellikler eklemek için kodu (yeni dosyalar/sınıflar ekleyerek) genişletin.</li>
</ul>

<hr/>

<h2>Laravel Taslağı: OCP'yi Master Etmek</h2>

<p>Laravel'de, "elektrik prizi" bir Interface (genellikle Sözleşme olarak adlandırılır) ve "cihazlar" ise sınıflarınızdır. Hayal edin ki Laravel uygulamanız kullanıcılarına pazarlama uyarıları göndermelidir. Başlangıçta patronunuz SMS uyarıları için Twilio'yu talep ediyor.</p>

<h3>❌ Genç Yaklaşım (OCP'yi İhlal Eder)</h3>

<p>Bir genç geliştirici Twilio'yu hizmete hardcode eder.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kn">namespace</span> <span class="nn">App\Services</span><span class="p">;</span>

    <span class="kn">use</span> <span class="nc">Twilio\Rest\Client</span><span class="p">;</span>

    <span class="kd">class</span> <span class="nc">OrderNotificationService</span> 
    <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">sendAlert</span><span class="p">(</span><span class="nv">$user</span><span class="p">,</span> <span class="nv">$message</span><span class="p">)</span> 
        <span class="p">{</span>
            <span class="c1">// Twilio'ya bağımlılık</span>
            <span class="nv">$twilio</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Client</span><span class="p">(</span><span class="nf">config</span><span class="p">(</span><span class="s1">'twilio.sid'</span><span class="p">),</span> <span class="nf">config</span><span class="p">(</span><span class="s1">'twilio.token'</span><span class="p">));</span>
            <span class="nv">$twilio</span><span class="o">-&gt;</span><span class="n">messages</span><span class="o">-&gt;</span><span class="nf">create</span><span class="p">(</span><span class="nv">$user</span><span class="o">-&gt;</span><span class="n">phone</span><span class="p">,</span> <span class="p">[</span><span class="s1">'body'</span> <span class="o">=&gt;</span> <span class="nv">$message</span><span class="p">]);</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<p>Problem: İki ay sonra patron, "Twilio çok pahalı, SMS için Vonage'a geçelim ve WhatsApp uyarıları da ekleyelim!" diyor. Şimdi bu sınıfı açıp kodu silip yeniden yazmanız gerekiyor. Bu, mevcut dağıtımınızı bozma riski taşır.</p>

<h3>✅ Laravel Ustalığı Yaklaşımı (OCP'ye Uyar)</h3>

<p>Bunu bir Laravel kıdemli mimarı gibi yazmak için, bir Sözleşme ve Laravel'in Hizmet Konteynerini kullanıyorsunuz.</p>

<h4>Adım 1: "Priz" (Sözleşme) Oluşturun</h4>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kn">namespace</span> <span class="nn">App\Contracts</span><span class="p">;</span>

    <span class="kd">interface</span> <span class="nc">SmsSender</span> 
    <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">send</span><span class="p">(</span><span class="kt">string</span> <span class="nv">$to</span><span class="p">,</span> <span class="kt">string</span> <span class="nv">$message</span><span class="p">):</span> <span class="kt">bool</span><span class="p">;</span>
    <span class="p">}</span>
    </code></pre>
</div>

<h4>Adım 2: "Cihazlar" (Sağlayıcılar) Oluşturun</h4>

<p>Artık her hizmet için ayrı sınıflar oluşturun. Eğer ihtiyacınız olursa, daha sonra sadece yeni bir dosya yaratın.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kn">namespace</span> <span class="nn">App\Services</span><span class="p">;</span>

    <span class="kn">use</span> <span class="nc">App\Contracts\SmsSender</span><span class="p">;</span>

    <span class="kd">class</span> <span class="nc">TwilioSender</span> <span class="kd">implements</span> <span class="nc">SmsSender</span> 
    <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">send</span><span class="p">(</span><span class="kt">string</span> <span class="nv">$to</span><span class="p">,</span> <span class="kt">string</span> <span class="nv">$message</span><span class="p">):</span> <span class="kt">bool</span><span class="p">{</span>
            <span class="c1">// Twilio'ya özel API kodu burada</span>
            <span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">class</span> <span class="nc">VonageSender</span> <span class="kd">implements</span> <span class="nc">SmsSender</span> 
    <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">send</span><span class="p">(</span><span class="kt">string</span> <span class="nv">$to</span><span class="p">,</span> <span class="kt">string</span> <span class="nv">$message</span><span class="p">):</span> <span class="kt">bool</span><span class="p">{</span>
            <span class="c1">// Vonage'a özel API kodu burada</span>
            <span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<h4>Adım 3: Sözleşmeyi Servisinize Enjekte Edin</h4>

<p>Servisiniz artık değişiklik yapmaya kapalıdır. Sadece arayüzü tanır, belirli markaları değil.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kn">namespace</span> <span class="nn">App\Services</span><span class="p">;</span>

    <span class="kn">use</span> <span class="nc">App\Contracts\SmsSender</span><span class="p">;</span>

    <span class="kd">class</span> <span class="nc">OrderNotificationService</span> 
    <span class="p">{</span>
        <span class="c1">// Laravel burada doğru göndericiyi otomatik olarak enjekte eder!</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">__construct</span><span class="p">(</span>
            <span class="k">protected</span> <span class="kt">SmsSender</span> <span class="nv">$smsSender</span>
        <span class="p">)</span> <span class="p">{}</span>

        <span class="k">public</span> <span class="k">function</span> <span class="n">sendAlert</span><span class="p">(</span><span class="nv">$user</span><span class="p">,</span> <span class="nv">$message</span><span class="p">)</span> 
        <span class="p">{</span>
            <span class="nv">$this</span><span class="o">-&gt;</span><span class="n">smsSender</span><span class="o">-&gt;</span><span class="nf">send</span><span class="p">(</span><span class="nv">$user</span><span class="o">-&gt;</span><span class="n">phone</span><span class="p">,</span> <span class="nv">$message</span><span class="p">);</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<h4>Adım 4: Sihirli Anahtar (AppServiceProvider)</h4>

<p>Laravel, hangi cihazın prize takılı olduğunu nasıl bilir? Bunu AppServiceProvider.php dosyanızda söylersiniz.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kn">namespace</span> <span class="nn">App\Providers</span><span class="p">;</span>

    <span class="kn">use</span> <span class="nc">Illuminate\Support\ServiceProvider</span><span class="p">;</span>
    <span class="kn">use</span> <span class="nc">App\Contracts\SmsSender</span><span class="p">;</span>
    <span class="kn">use</span> <span class="nc">App\Services\TwilioSender</span><span class="p">;</span>
    <span class="kn">use</span> <span class="nc">App\Services\VonageSender</span><span class="p">;</span>

    <span class="kd">class</span> <span class="nc">AppServiceProvider</span> <span class="kd">extends</span> <span class="nc">ServiceProvider</span>
    <span class="p">{</span>
        <span class="k">public</span> <span class="k">function</span> <span class="n">register</span><span class="p">():</span> <span class="kt">void</span><span class="p">{</span>
            <span class="c1">// Twilio'dan Vonage'a geçmek için burada tam olarak BİR satırı değiştirin:</span>
            <span class="nv">$this</span><span class="o">-&gt;</span><span class="n">app</span><span class="o">-&gt;</span><span class="nf">bind</span><span class="p">(</span><span class="nc">SmsSender</span><span class="o">::</span><span class="n">class</span><span class="p">,</span> <span class="nc">TwilioSender</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
        <span class="p">}</span>
    <span class="p">}</span>
    </code></pre>
</div>

<hr/>

<h3>Bunu Yapmak Sizi Laravel Ustası Yapar</h3>

<ol>
    <li>Sıfır Riskli Özellik Eklemeleri: Patron, yarın WhatsApp eklemek isterse, OrderNotificationService'e dokunmazsınız. Sadece bir WhatsAppSender dosyası yazarsınız ve bunu Hizmet Sağlayıcısında değiştirirsiniz.</li>
    <li>Mocking &amp; Testing: Özellik testlerinizde, uygulamayı sahte bir düzenleme ile değiştirebilirsiniz (SmsSender::fake()), böylece test sırasında gerçek mesajlar göndermeyi istemezsiniz.</li>
</ol>

Kaynak: Orijinal Makale

Raw S3 URL’lerini Laravel Görsel Proxy ile Nasıl Değiştiririz (CDN Önbelleğinizi Koruyarak)
Laravel Ekran Görüntüsü API’si: PHP’de Ekran Görüntüsü Yakalama ve PDF Oluşturma
Laravel’de Çalışma Zamanı İstek İncelemesi (Koruyucular, Bağlamlar ve Tercihler)
Laravel Uygulamamızda İçerik Güvenlik Politikası (CSP) Nasıl Uygulandı
Fish Shell ve Laravel Valet: Otomatik PHP Versiyonları ve Composer v1/v2 Değişimi
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Kritik: Langflow RCE ile AI Ajansı Veri Tabanı Fidye Saldırısı Yapıyor
Sonraki Makale Gen Z’nin Büyük Teknolojiye Başkaldırısı: Luddite Festivali Neler Sunuyor?

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Tesla’nın Q2 Satışları Yüzde 25 Arttı
Liste
ABD hükümeti yeniden siber saldırıya uğradı
Genel
Supermicro, Tayvan yetkililerinin ofislerini basmadığını açıkladı
Donanım
Tekrar Oynanabilirlikten Ödün Vermeyen Stuntman Hollywood Fark Yaratiyor
Oyun
Acil: ToddyCat-Linked Umbrij Zararlısı Gmail’i OAuth ile Tehdit Ediyor
Siber Güvenlik
Meta’nın Akıllı Gözlükleri: Abonelikle Gelen Yeni Özellikler Neler?
Genel
//

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?