<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Barış Bideratan</title>
    <description>The latest articles on DEV Community by Barış Bideratan (@baris).</description>
    <link>https://dev.to/baris</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F165181%2Fc1db4f87-2222-4c50-b969-88fb95c0067b.png</url>
      <title>DEV Community: Barış Bideratan</title>
      <link>https://dev.to/baris</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/baris"/>
    <language>en</language>
    <item>
      <title>Laravel'de Real-Time Facades Nedir? Nasıl Çalışır?</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Sun, 09 Nov 2025 11:40:50 +0000</pubDate>
      <link>https://dev.to/baris/laravelde-real-time-facades-nedir-nasil-calisir-1h84</link>
      <guid>https://dev.to/baris/laravelde-real-time-facades-nedir-nasil-calisir-1h84</guid>
      <description>&lt;p&gt;Laravel, servis container yapısıyla dependency injection (bağımlılık enjeksiyonu) kullanımını kolaylaştırır. Ancak bazı durumlarda her servisi container üzerinden almak ya da özel bir Facade sınıfı oluşturmak gereksiz gelebilir. İşte &lt;strong&gt;Real-Time Facades&lt;/strong&gt; bu noktada devreye giriyor.&lt;/p&gt;

&lt;p&gt;Kısaca özetlemek gerekirse:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Real-Time Facades, herhangi bir sınıfı veya interface'i, özel bir Facade sınıfı yazmadan &lt;strong&gt;Facade gibi kullanmanı&lt;/strong&gt; sağlar.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Facade Nedir?
&lt;/h2&gt;

&lt;p&gt;Laravel’de Facade, container içindeki bir servise statik gibi görünen bir arabirim sunar.&lt;br&gt;
Örneğin &lt;code&gt;Cache::get()&lt;/code&gt; ya da &lt;code&gt;Log::info()&lt;/code&gt; çağrıları aslında arka planda container içinden çözümlenir.&lt;/p&gt;

&lt;p&gt;Ama her Facade için ayrı bir sınıf yazmak gerekir.&lt;br&gt;
Örneğin &lt;code&gt;App\Facades\MyService&lt;/code&gt; gibi.&lt;br&gt;
Real-Time Facades ise bu işi senin yerine yapar.&lt;/p&gt;


&lt;h2&gt;
  
  
  Normal Kullanım vs Real-Time Facade
&lt;/h2&gt;

&lt;p&gt;Önce klasik bir örnek üzerinden gidelim.&lt;/p&gt;
&lt;h3&gt;
  
  
  Klasik yöntem:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Services\Publisher&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Database\Eloquent\Model&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Podcast&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Publisher&lt;/span&gt; &lt;span class="nv"&gt;$publisher&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'published_at'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()]);&lt;/span&gt;

        &lt;span class="nv"&gt;$publisher&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Burada &lt;code&gt;Publisher&lt;/code&gt; sınıfını method parametresi olarak alıyoruz.&lt;br&gt;
Gayet güzel ama her çağrıda bu parametreyi geçirmek gerekiyor.&lt;/p&gt;


&lt;h3&gt;
  
  
  Real-Time Facade ile:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Facades\App\Services\Publisher&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Database\Eloquent\Model&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Podcast&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'published_at'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()]);&lt;/span&gt;

        &lt;span class="nc"&gt;Publisher&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Bak farkı fark ettin mi?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Artık &lt;code&gt;Publisher&lt;/code&gt; servisini parametre olarak geçmedik.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;use Facades\App\Services\Publisher;&lt;/code&gt; yazarak Laravel’e “bu sınıfı facade gibi kullan” dedik.&lt;/li&gt;
&lt;li&gt;Yani &lt;code&gt;Publisher::publish()&lt;/code&gt; dediğimizde Laravel container’dan otomatik olarak &lt;code&gt;App\Services\Publisher&lt;/code&gt; örneğini çözüp metodu çalıştırıyor.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Gerçekten “Statik” mi Çalışıyor?
&lt;/h2&gt;

&lt;p&gt;Hayır.&lt;br&gt;
&lt;code&gt;Publisher::publish()&lt;/code&gt; statik gibi görünse de aslında container’dan dinamik olarak çözülüyor.&lt;br&gt;
Bu sayede test ederken mock oluşturabiliyorsun:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Publisher&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;shouldReceive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'publish'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;once&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$podcast&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yani hem facade rahatlığını hem test edilebilirliği koruyorsun.&lt;/p&gt;




&lt;h2&gt;
  
  
  Gerçek Hayattan Bir Örnek
&lt;/h2&gt;

&lt;p&gt;Diyelim ki bir &lt;code&gt;Notifier&lt;/code&gt; servisin var:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$subject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// E-posta gönderme işlemi&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Klasik kullanım:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$notifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;app&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\App\Services\Notifier&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$notifier&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'test@example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Merhaba!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Real-Time Facade ile:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Facades\App\Services\Notifier&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Notifier&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'test@example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Merhaba!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tek satırla aynı işi yaptık.&lt;br&gt;
Kod hem okunabilir hem sade.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ne Zaman Kullanmalı?
&lt;/h2&gt;

&lt;p&gt;Real-Time Facades harika bir kolaylık ama her yerde kullanmak doğru değil.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kullan:&lt;/strong&gt;&lt;br&gt;
✅ Basit servis çağrılarında&lt;br&gt;
✅ Model içindeki küçük yardımcı işlemlerde&lt;br&gt;
✅ Hızlı prototip geliştirme aşamalarında&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kullanma:&lt;/strong&gt;&lt;br&gt;
❌ Büyük veya karmaşık servislerde&lt;br&gt;
❌ Kodun bağımlılıklarını açık görmek istiyorsan&lt;br&gt;
❌ Fazla mock işlemiyle test yazıyorsan&lt;/p&gt;

&lt;p&gt;Kısacası, tıpkı kahve gibi:&lt;br&gt;
&lt;strong&gt;Azı lezzet, fazlası çarpıntı. ☕&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Özet
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;use Facades\&lt;/code&gt; ile başlayan bir import yaptığında Laravel otomatik olarak Real-Time Facade oluşturur.&lt;/li&gt;
&lt;li&gt;Arka planda container çözümlemesi yapılır, yani dependency injection hâlâ geçerlidir.&lt;/li&gt;
&lt;li&gt;Testlerde &lt;code&gt;shouldReceive()&lt;/code&gt; kullanarak mock oluşturabilirsin.&lt;/li&gt;
&lt;li&gt;Kodun sadeleşir ama “nereden geliyor bu servis?” sorusu bazen bulanıklaşabilir.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>facades</category>
      <category>webdev</category>
    </item>
    <item>
      <title>APK Dosyalarını Düzenleme ve Yeniden İmzalama: Adım Adım Kılavuz</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Tue, 04 Feb 2025 07:08:58 +0000</pubDate>
      <link>https://dev.to/baris/apk-dosyalarini-duzenleme-ve-yeniden-imzalama-adim-adim-kilavuz-4i4p</link>
      <guid>https://dev.to/baris/apk-dosyalarini-duzenleme-ve-yeniden-imzalama-adim-adim-kilavuz-4i4p</guid>
      <description>&lt;p&gt;Selamlar,&lt;/p&gt;

&lt;p&gt;Bu makalede, bir Android APK dosyasını nasıl decompile edip, kodları inceleyip düzenleyebileceğinizi, ardından yeniden build, optimize ve imzalama işlemleriyle crack hazırlığınızı nasıl tamamlayacağınızı adım adım anlatacağım. Her bir adımı dikkatle uygulayarak süreci başarıyla tamamlayabilirsiniz. Bir sonraki makalemde de Frida ile javascript kullanarak neler yapabileceğinizi anlatacağım :)&lt;/p&gt;




&lt;h2&gt;
  
  
  1. APK Dosyasını Çıkarın (Extract)
&lt;/h2&gt;

&lt;p&gt;İlk adımda, &lt;strong&gt;apktool&lt;/strong&gt; kullanarak APK dosyasını extract etmeniz gerekiyor. Bu işlem, APK içeriğini smali dosyalarına ve kaynak dosyalara ayırarak düzenleme yapmanızı sağlar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apktool d &amp;lt;path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Burada &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; kısmına düzenlemek istediğiniz APK dosyasının yolunu yazmalısınız.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Kodları İnceleyin
&lt;/h2&gt;

&lt;p&gt;Extract işleminin ardından, &lt;strong&gt;jadx&lt;/strong&gt; aracı ile APK dosyasını açıp kodları inceleyin. Jadx, byte kodu okunabilir Java koduna çevirerek uygulamanın mantığını anlamanızı sağlar.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;İpucu:&lt;/strong&gt; Hangi kodlarda değişiklik yapmanız gerektiğine karar verirken, bu aracı kullanarak detaylı bir analiz yapabilirsiniz.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Smali Kodlarda Gerekli Değişiklikleri Yapın
&lt;/h2&gt;

&lt;p&gt;Jadx ile incelediğiniz kodlarda emin olduğunuz kısımları belirleyin. Ardından, &lt;strong&gt;apktool&lt;/strong&gt; ile extract ettiğiniz smali dosyaları arasında bu kod satırlarını bulun ve gerekli değişiklikleri uygulayın.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dikkat:&lt;/strong&gt; Smali kodlar üzerinde yapacağınız değişiklikler, uygulamanın çalışma mantığını etkileyebileceğinden, dikkatli ve özenli olun.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Değişikliklerden Sonra Build İşlemi
&lt;/h2&gt;

&lt;p&gt;Yaptığınız düzenlemeler sonrasında, extract ettiğiniz dosyaların root dizininde iken yeniden build almanız gerekmektedir. Bunun için &lt;strong&gt;apktool&lt;/strong&gt;’un build komutunu kullanın:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apktool b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Bu komut, düzenlenmiş dosyalarınızı yeniden derleyerek yeni bir APK oluşturur.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. İmzalama İçin Key Oluşturun
&lt;/h2&gt;

&lt;p&gt;Yeni build aldığınız APK’yı imzalayabilmek için öncelikle bir imzalama key’ine ihtiyacınız var. Bunun için &lt;strong&gt;keytool&lt;/strong&gt; kullanarak aşağıdaki komutla key oluşturabilirsiniz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;keytool &lt;span class="nt"&gt;-genkey&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-keystore&lt;/span&gt; DOSYAADI.keystore &lt;span class="nt"&gt;-alias&lt;/span&gt; alias_name &lt;span class="nt"&gt;-keyalg&lt;/span&gt; RSA &lt;span class="nt"&gt;-keysize&lt;/span&gt; 2048 &lt;span class="nt"&gt;-validity&lt;/span&gt; 10000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Açıklama:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DOSYAADI.keystore&lt;/code&gt;: Oluşturulacak keystore dosyasının adı.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;alias_name&lt;/code&gt;: Key’in alias adı.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-keyalg RSA -keysize 2048&lt;/code&gt;: RSA algoritması ile 2048 bit büyüklüğünde key oluşturma.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-validity 10000&lt;/code&gt;: Key’in geçerlilik süresi (gün olarak).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. APK Dosyasını Zipalign ile Optimize Edin
&lt;/h2&gt;

&lt;p&gt;Build işleminden sonra, APK dosyasını &lt;strong&gt;zipalign&lt;/strong&gt; aracı ile optimize ederek hizalamaları düzenleyin. Bu işlem, APK performansını artırır ve yükleme sırasında hata olasılığını azaltır.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zipalign &lt;span class="nt"&gt;-v&lt;/span&gt; 4 original.apk original_zipaligned.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;original.apk&lt;/code&gt;: Orijinal build edilmiş APK dosyası.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;original_zipaligned.apk&lt;/code&gt;: Zipalign işlemi sonrası oluşacak optimize edilmiş APK dosyası.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. APK Dosyasını İmzalama
&lt;/h2&gt;

&lt;p&gt;Son adım olarak, &lt;strong&gt;uber-apk-signer&lt;/strong&gt; aracını kullanarak APK dosyasını imzalayın. İmzalama, uygulamanın güvenliği açısından önemlidir ve imzasız APK’lar yüklenmeyebilir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-jar&lt;/span&gt; uber-apk-signer-1.3.0.jar &lt;span class="nt"&gt;--skipZipAlign&lt;/span&gt; &lt;span class="nt"&gt;--apks&lt;/span&gt; ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Açıklama:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--skipZipAlign&lt;/code&gt;: Zaten zipalign işlemini tamamladıysanız, tekrar yapmamak için bu parametreyi kullanabilirsiniz.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--apks ./&lt;/code&gt;: İmzalanacak APK dosyasının bulunduğu dizini belirtir.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Sonuç
&lt;/h2&gt;

&lt;p&gt;Yukarıdaki adımları sırasıyla takip ederek APK dosyasını extract ettiniz, kodları incelediniz, gerekli düzenlemeleri yaptınız, yeniden build aldınız, optimize ettiniz ve son olarak imzaladınız. Artık crack işleminiz için hazırlıklar tamam; &lt;strong&gt;hayırlı olsun, crack hazır :)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unutmayın, bu tür işlemler sadece eğitim amaçlıdır. Gerçek bir ürün üzerinde asla denemeyin!&lt;/p&gt;

&lt;p&gt;~/Android/Sdk&lt;/p&gt;

&lt;p&gt;$ ---- apktool b &amp;amp;&amp;amp; cd dist &amp;amp;&amp;amp; zipalign -p -f 4 Obsidian-V1.3.objection.apk Obsidian-V1.3.objection_zipaligned.apk &amp;amp;&amp;amp; java -jar uber-apk-signer-1.3.0.jar --skipZipAlign --apks ./&lt;/p&gt;

</description>
    </item>
    <item>
      <title>PHP’de Early Return: Kodunuzu Temizleyen Basit Bir Yaklaşım</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Thu, 09 Jan 2025 09:15:14 +0000</pubDate>
      <link>https://dev.to/baris/phpde-early-return-kodunuzu-temizleyen-basit-bir-yaklasim-3cng</link>
      <guid>https://dev.to/baris/phpde-early-return-kodunuzu-temizleyen-basit-bir-yaklasim-3cng</guid>
      <description>&lt;p&gt;Merhaba Arkadaşlar!&lt;/p&gt;

&lt;p&gt;Bugün sizlere yazdığımız kodları daha temiz ve okunabilir hale getiren bir yaklaşımdan bahsedeceğim: &lt;strong&gt;Early Return (Erken Dönüş)&lt;/strong&gt;. PHP'de bu yaklaşımı kullanarak hem kod yazma deneyiminizi iyileştirebilir hem de projelerinizin daha bakımı kolay bir hale gelmesini sağlayabilirsiniz.&lt;/p&gt;

&lt;h3&gt;
  
  
  Early Return Nedir?
&lt;/h3&gt;

&lt;p&gt;Early return, fonksiyonların başında belirli bir koşul karşılandığında veya karşılanmadığında fonksiyonu erken sonlandırmak için kullandığımız bir tekniktir. Bu yöntem, kod içinde gereksiz iç içe bloklardan kurtulmamıza yardımcı olur ve yazım sürecini daha akıcı hale getirir.&lt;/p&gt;

&lt;p&gt;Kısaca, bir “guard clause” olarak da adlandırılan bu teknik, “Eğer bu durum karşılanmıyorsa, şu anda dön” mantığıyla çalışır.&lt;/p&gt;

&lt;h3&gt;
  
  
  Neden Early Return Kullanmalıyız?
&lt;/h3&gt;

&lt;p&gt;Kod yazarken hepimizin amacı daha okunabilir, anlaşılır ve bakımı kolay yapılar oluşturmaktır. Early return tam olarak bunu sağlar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Okunabilirlik Artar:&lt;/strong&gt; Kodunuz, gereksiz iç içe bloklardan kurtulduğu için daha temiz ve kolay anlaşılabilir hale gelir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hata Kontrolü Daha Kolay Olur:&lt;/strong&gt; Hata durumlarını hemen kontrol edip ele almak, kodun ilerleyen kısımlarında yanlışların birikmesini önler.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bakım Kolaylığı:&lt;/strong&gt; Projenize yeni biri katıldığında veya siz bir süre sonra kodunuza geri döndünüzde, early return kullanan yapılar daha kolay çözülür.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performans:&lt;/strong&gt; Gereksiz şekilde fonksiyonun ilerleyen kısımlarını çalıştırmak yerine, önceden dönülerek zamandan tasarruf edilir.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Early Return Nasıl Kullanılır?
&lt;/h3&gt;

&lt;p&gt;Hadi bir senaryo üzerinden early return'i inceleyelim.&lt;/p&gt;

&lt;h4&gt;
  
  
  Klasik Yaklaşım
&lt;/h4&gt;

&lt;p&gt;Bir kullanıcının yaşını kontrol ettiğimizi düşünelim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;checkAge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Giriş yapabilirsiniz."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Yaş sınırına uygun değilsiniz."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu kod işlevsel gibi görünse de, bir "else" bloğu barındırdığı için okunabilirliği bir miktar düşürebilir. Kod ilerledikçe iç içe geçen blokların arttığını hayal edin.&lt;/p&gt;

&lt;h4&gt;
  
  
  Early Return ile
&lt;/h4&gt;

&lt;p&gt;Aynı senaryoyu early return kullanarak yazalım:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;checkAge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$age&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Yaş sınırına uygun değilsiniz."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Giriş yapabilirsiniz."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Şimdi bu kodun farklılıklarına bakalım:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hata durumunu başta kontrol ettik ve hemen geri döndük.&lt;/li&gt;
&lt;li&gt;Fonksiyonun geri kalanı yalın ve anlaşılır oldu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;else&lt;/strong&gt; bloğunu ortadan kaldırdık.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Daha Karmaşık Bir Örnek
&lt;/h3&gt;

&lt;p&gt;Bir kullanıcının sisteme giriş yapması gereken bir senaryoyu düşünelim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;loginUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Kullanıcı bulunamadı."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;isActive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Kullanıcı aktif değil."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hoş geldiniz, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Burada farklı durumları teker teker kontrol edip her durumda fonksiyondan erken çıkıyoruz. Bu, iç içe bloklardan kurtulmamıza yardımcı oluyor. Özellikle fonksiyonlarınızda birden fazla kontrol noktaları varsa, bu yaklaşımı kullanmanızı şiddetle tavsiye ederim.&lt;/p&gt;

&lt;p&gt;Unutmayın, kod yazarken amacımız sadece çalışan bir sistem değil, aynı zamanda kolay anlaşılabilir bir sistem oluşturmaktır. Siz de early return'i projelerinizde denemeyi unutmayın!&lt;/p&gt;

&lt;p&gt;Görüşlerinizi yorumlarda bekliyorum! 😊&lt;/p&gt;

</description>
    </item>
    <item>
      <title>PHP'de Metotlar Arası Takip: Hangi Metottan Geldim?</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Thu, 19 Dec 2024 07:52:08 +0000</pubDate>
      <link>https://dev.to/baris/laravelde-metotlar-arasi-takip-hangi-metottan-geldim-1gjc</link>
      <guid>https://dev.to/baris/laravelde-metotlar-arasi-takip-hangi-metottan-geldim-1gjc</guid>
      <description>&lt;p&gt;Herkese selamlar! 👋&lt;/p&gt;

&lt;p&gt;PHP projelerimizde bazen bir metottan başka bir metodu çağırırken, çağrıyı yapan metodu öğrenmek isteyebiliriz. "Ama neden?" diye sorabilirsiniz. Gelin önce böyle bir duruma neden ihtiyaç duyabileceğimizden bahsedelim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Neden Hangi Metottan Geldiğini Bilmek İsteyelim?
&lt;/h2&gt;

&lt;p&gt;Diyelim ki bir web uygulaması geliştiriyorsunuz ve birden fazla metot, aynı işlevi yerine getiren ortak bir metodu çağırıyor. Ancak bu ortak metodun davranışını, çağıran metoda göre farklılaştırmak istiyorsunuz. Mesela bir loglama işlemi yapacaksınız ve hangi metottan çağrıldığını bilmek, loglarınıza anlam katacak. Ancak, ek parametreler göndermek istemiyorsunuz; kodunuz sade ve temiz kalsın istiyorsunuz.&lt;/p&gt;

&lt;p&gt;İşte tam bu noktada PHP'nin güçlü araçlarından biri olan &lt;code&gt;debug_backtrace&lt;/code&gt; yardımımıza koşuyor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gerçek Bir Örnek Üzerinden Anlatım
&lt;/h2&gt;

&lt;p&gt;Haydi bir senaryo üzerinden bu işi nasıl yapabileceğimizi görelim. Elimizde şöyle bir Laravel controller'ı olsun:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Http\Controllers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExampleController&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Controller&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Çağrının geldiği metodu tespit et&lt;/span&gt;
        &lt;span class="nv"&gt;$trace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;debug_backtrace&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nv"&gt;$caller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$trace&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'function'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Bir önceki çağrıyı al&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;response&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
            &lt;span class="s1"&gt;'called_from'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$caller&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kodun Açıklaması
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;a()&lt;/code&gt; ve &lt;code&gt;b()&lt;/code&gt; metotları, ortak olan &lt;code&gt;c()&lt;/code&gt; metodunu çağırıyor.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;c()&lt;/code&gt; metodunda &lt;code&gt;debug_backtrace()&lt;/code&gt; fonksiyonunu kullanıyoruz.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;debug_backtrace()[1]&lt;/code&gt; ile bir önceki çağrının detaylarını alıyoruz.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;['function']&lt;/code&gt; anahtarı, çağrıyı yapan metot adını döndürüyor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Çalışma Sonucu
&lt;/h3&gt;

&lt;p&gt;Eğer tarayıcıda &lt;code&gt;a()&lt;/code&gt; metodunu çağırırsanız:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"called_from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;b()&lt;/code&gt; metodunu çağırırsanız:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"called_from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu kadar basit ve etkili! 👌&lt;/p&gt;

&lt;h2&gt;
  
  
  Nerelerde Kullanabiliriz?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loglama:&lt;/strong&gt; Çağrıyı hangi metottan yaptığınızı bilmek, loglarınızı anlamlı hale getirebilir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dinamik Davranışlar:&lt;/strong&gt; Aynı metodu farklı davranışlar sergilemesi için özelleştirmek istediğinizde, çağıran metodu bilmek işinizi kolaylaştırır.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hata Ayıklama:&lt;/strong&gt; Uygulama içinde metotların çağrı yığınını görmek, hataları daha hızlı çözmenizi sağlar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dikkat Edilmesi Gerekenler
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;debug_backtrace&lt;/code&gt; her ne kadar güçlü bir araç olsa da, bazı durumlarda performans üzerinde etkisi olabilir. Çok sık çağrılan metotlarda kullanıyorsanız dikkatli olun. Ayrıca, bu yöntemi yalnızca gerçekten gerekli olduğunda tercih edin. Aksi halde kodunuz gereksiz karmaşık hale gelebilir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sonuç
&lt;/h2&gt;

&lt;p&gt;Metotlar arası takip yapmak gerektiğinde, &lt;code&gt;debug_backtrace&lt;/code&gt; tam bir hayat kurtarıcıdır. Ekstra parametrelerle kodu şişirmeden, temiz ve sade bir şekilde çözüm sunar.&lt;/p&gt;

&lt;p&gt;Umarım bu yazı sizin için faydalı olmuştur! Eklemek istedikleriniz varsa, yorumlarda buluşalım. 😊&lt;/p&gt;

&lt;p&gt;🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Laravel'de .env Dosyasında Bir Değişkeni Diğerine Referans Verme</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Fri, 27 Sep 2024 20:35:34 +0000</pubDate>
      <link>https://dev.to/baris/laravelde-env-dosyasinda-bir-degiskeni-digerine-referans-verme-1b76</link>
      <guid>https://dev.to/baris/laravelde-env-dosyasinda-bir-degiskeni-digerine-referans-verme-1b76</guid>
      <description>&lt;p&gt;Laravel projelerinde yapılandırma ayarları genellikle &lt;code&gt;.env&lt;/code&gt; dosyasında tanımlanır. Çoğu zaman, bu dosya içerisinde bir değişkeni diğer bir değişkene referans etmek isteyebilirsiniz. Bu gibi durumlarda Laravel, &lt;code&gt;${}&lt;/code&gt; string şablonunu kullanmanıza olanak tanır. Böylece önceden tanımladığınız bir değişkeni başka bir değişken içerisinde çağırabilirsiniz.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nasıl Yapılır?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;.env&lt;/code&gt; dosyasında bir değişkeni diğerine referans vermek için şu yöntemi kullanabilirsiniz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APP_NAME=Netsper
DASHBOARD_TITLE="${APP_NAME} Dashboard"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu yapılandırma ile, &lt;code&gt;DASHBOARD_TITLE&lt;/code&gt; değişkeni artık &lt;code&gt;"Netsper Dashboard"&lt;/code&gt; değerine sahip olacaktır. İlk değişken olan &lt;code&gt;APP_NAME&lt;/code&gt; değerini doğrudan kullanarak yeni bir string oluşturmuş oldunuz.&lt;/p&gt;

&lt;p&gt;Bu basit ancak etkili yöntemi projelerinizde rahatlıkla kullanabilirsiniz!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Laravel Migration: Metin Veri Tipleri Arasındaki Farklar</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Wed, 12 Jun 2024 10:17:47 +0000</pubDate>
      <link>https://dev.to/baris/laravel-migration-metin-veri-tipleri-arasindaki-farklar-1a6j</link>
      <guid>https://dev.to/baris/laravel-migration-metin-veri-tipleri-arasindaki-farklar-1a6j</guid>
      <description>&lt;p&gt;Herkese selamlar! Bu makalede &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;longText&lt;/code&gt;, &lt;code&gt;mediumText&lt;/code&gt;, ve &lt;code&gt;tinyText&lt;/code&gt; veri tiplerini ve bunların kullanımını inceleyeceğiz.&lt;/p&gt;

&lt;p&gt;Laravel'de &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;longText&lt;/code&gt;, &lt;code&gt;mediumText&lt;/code&gt; ve &lt;code&gt;tinyText&lt;/code&gt; veri tiplerinin farklarını anlamak, veritabanı tasarımınızı optimize etmenize ve doğru veri tipini seçerek performansı artırmanıza yardımcı olur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Text Veri Tipleri
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. &lt;code&gt;text&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;text&lt;/code&gt; veri tipi, orta boyutlu metin verilerini saklamak için kullanılır. 65,535 karaktere kadar veri saklayabilir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'posts'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'content'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu tip genellikle blog yazıları, açıklamalar veya kullanıcı girdileri gibi orta boyutlu metinler için uygundur.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;code&gt;longText&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;longText&lt;/code&gt;, büyük miktarda metin verisi saklamak için kullanılır ve 4,294,967,295 karaktere kadar veri saklayabilir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'articles'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;longText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'body'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu tip, büyük belgeler, uzun makaleler veya HTML içeriklerinin saklanması için idealdir.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. &lt;code&gt;mediumText&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;mediumText&lt;/code&gt; veri tipi, &lt;code&gt;text&lt;/code&gt; ve &lt;code&gt;longText&lt;/code&gt; arasında bir yerdedir ve 16,777,215 karaktere kadar veri saklayabilir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'comments'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;mediumText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu tip, orta boyutlu ile büyük boyutlu metinler arasında yer alan veriler için uygundur, örneğin kullanıcı yorumları veya detaylı açıklamalar.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. &lt;code&gt;tinyText&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;tinyText&lt;/code&gt; veri tipi, çok küçük boyutlu metin verilerini saklamak için kullanılır ve 255 karaktere kadar veri saklayabilir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'tags'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;tinyText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu tip, kısa etiketler, açıklamalar veya çok kısa metinler için uygundur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metin Veri Tiplerinin Seçimi
&lt;/h3&gt;

&lt;p&gt;Hangi veri tipini kullanmanız gerektiğine karar verirken, saklayacağınız metin verisinin boyutunu ve kullanım amacını göz önünde bulundurmalısınız:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;text&lt;/code&gt;&lt;/strong&gt;: Orta boyutlu metinler (blog yazıları, açıklamalar).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;longText&lt;/code&gt;&lt;/strong&gt;: Çok büyük metinler (büyük belgeler, HTML içerikleri).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;mediumText&lt;/code&gt;&lt;/strong&gt;: Orta ile büyük boyutlu metinler (detaylı kullanıcı yorumları).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;tinyText&lt;/code&gt;&lt;/strong&gt;: Çok küçük metinler (etiketler, kısa açıklamalar).&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Laravel'de Carbon Kütüphanesini Yerelleştirme</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Tue, 11 Jun 2024 08:38:44 +0000</pubDate>
      <link>https://dev.to/baris/laravelde-carbon-kutuphanesini-yerellestirme-2fn3</link>
      <guid>https://dev.to/baris/laravelde-carbon-kutuphanesini-yerellestirme-2fn3</guid>
      <description>&lt;p&gt;Carbon, yerelleştirme için &lt;code&gt;setLocale&lt;/code&gt; metodunu kullanır. Uygulamanızın servis sağlayıcısında veya bir middleware içinde bu ayarı yapabilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AppServiceProvider&lt;/code&gt; içine yerleştirerek Carbon'un yerelleştirme ayarlarını yapabilirsiniz:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Support\ServiceProvider&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Carbon\Carbon&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppServiceProvider&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;ServiceProvider&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;boot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Carbon&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;setLocale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'app.locale'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu örnekte, Laravel'in varsayılan dil ayarı olan &lt;code&gt;app.locale&lt;/code&gt; değeri kullanılarak Carbon'un dili ayarlanır. &lt;code&gt;config/app.php&lt;/code&gt; dosyasında &lt;code&gt;locale&lt;/code&gt; ayarının &lt;code&gt;tr&lt;/code&gt; olarak ayarlandığından emin olun:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="s1"&gt;'locale'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'tr'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Yerelleştirilmiş Tarih ve Saat Formatlarını Kullanma
&lt;/h5&gt;

&lt;p&gt;Carbon, yerelleştirilmiş formatlarda tarih ve saat görüntülemek için çeşitli metodlar sunar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Carbon&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$now&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;isoFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'LLLL'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Örneğin, "Çarşamba, 15 Haziran 2024 14:23" gibi bir çıktı verir.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;veya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Carbon&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$now&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;translatedFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'m/d/Y h:i a'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gördüğünüz gibi Laravel'de Carbon kütüphanesini yerelleştirmek oldukça basit. &lt;code&gt;AppServiceProvider&lt;/code&gt; içinde Carbon'un dilini ayarlayarak ve Laravel'in yerelleştirme dosyalarını yapılandırarak tarih ve saat bilgilerini istediğiniz dilde görüntüleyebilirsiniz. Bu sayede, uygulamanızın kullanıcıları kendi dillerinde daha anlaşılır ve kullanıcı dostu bir deneyim yaşarlar.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>PHP 8.1 ile Gelen Enum'lar: Kodunuzu Daha Güvenli ve Anlaşılır Hale Getirin</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Tue, 11 Jun 2024 07:19:19 +0000</pubDate>
      <link>https://dev.to/baris/php-81-ile-gelen-enumlar-kodunuzu-daha-guvenli-ve-anlasilir-hale-getirin-3g44</link>
      <guid>https://dev.to/baris/php-81-ile-gelen-enumlar-kodunuzu-daha-guvenli-ve-anlasilir-hale-getirin-3g44</guid>
      <description>&lt;p&gt;PHP 8.1'in tanıtılmasıyla birlikte birçok yeni özellik ve iyileştirme geldi. Bu özelliklerden biri de &lt;code&gt;enum&lt;/code&gt;'lar. Bu yazıda, enum'ların ne olduğunu, PHP'de nasıl kullanıldığını ve yazılım geliştirme sürecinizde neden bu kadar önemli olduklarını detaylı bir şekilde inceleyeceğiz.&lt;/p&gt;

&lt;h4&gt;
  
  
  Enum Nedir?
&lt;/h4&gt;

&lt;p&gt;Enum (enumeration), belirli bir sabit değerler kümesini tanımlayan bir veri türüdür. Enum'lar, özellikle bir değişkenin belirli, sabit bir grup değerden birini alması gerektiğinde kullanılır. Bu, kodun okunabilirliğini ve bakımını kolaylaştırır ve hataları azaltır. &lt;/p&gt;

&lt;h4&gt;
  
  
  PHP'de Enum'lar
&lt;/h4&gt;

&lt;p&gt;PHP 8.1 ile birlikte gelen enum'lar, aşağıdaki şekilde tanımlanabilir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Status&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nc"&gt;Pending&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nc"&gt;Approved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nc"&gt;Rejected&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Kullanım&lt;/span&gt;
&lt;span class="nv"&gt;$status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Status&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Pending&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nc"&gt;Status&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Approved&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Status is approved."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Enum'ların Temel Amacı Nedir?
&lt;/h4&gt;

&lt;p&gt;Enum'ların temel amacı, belirli bir grup değeri daha güvenli ve anlaşılır bir şekilde yönetmektir. Bu, kodun okunabilirliğini ve bakımını kolaylaştırır ve hataları azaltır. Özellikle belirli bir değişkenin sadece belirli değerler alması gerektiğinde kullanışlıdır.&lt;/p&gt;

&lt;h4&gt;
  
  
  Enum Kullanım Senaryoları
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Durum Yönetimi:&lt;/strong&gt; Sipariş durumları, kullanıcı hesap durumları gibi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hata Kodları:&lt;/strong&gt; Belirli hata türlerini tanımlamak için.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rol Yönetimi:&lt;/strong&gt; Kullanıcı rolleri (Admin, User, Guest) gibi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ödeme Yöntemleri:&lt;/strong&gt; Kredi kartı, banka havalesi, PayPal gibi ödeme yöntemlerini tanımlamak için.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Enum Tanımlamadığımızda Olabilecek Problemler
&lt;/h4&gt;

&lt;p&gt;Enum'lar kullanılmadığında, belirli bir grup sabit değeri yönetmek için genellikle sabitler veya stringler kullanılır. Bu, aşağıdaki problemlere yol açabilir:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hata Yapma Riski:&lt;/strong&gt; Bir string ya da sabit yanlış yazıldığında (örneğin, 'approved' yerine 'aproved'), hata ayıklamak zor olabilir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kod Okunabilirliği:&lt;/strong&gt; Sabitler veya stringler kullanıldığında, kodun okunabilirliği ve anlaşılabilirliği azalabilir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bakım Zorluğu:&lt;/strong&gt; Değerlerde bir değişiklik gerektiğinde (örneğin, 'pending' yerine 'awaiting'), tüm kod tabanını güncellemek zor olabilir.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  PHP'de Enum İle İlgili İleri Düzey Özellikler
&lt;/h4&gt;

&lt;p&gt;PHP'de enum'lar, sadece sabit değerlerin bir koleksiyonunu tanımlamakla kalmaz, aynı zamanda enum sınıflarına metotlar da ekleyebilirsiniz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Status&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nc"&gt;Pending&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nc"&gt;Approved&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nc"&gt;Rejected&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getLabel&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Pending&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Pending'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Approved&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Approved'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Rejected&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Rejected'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Kullanım&lt;/span&gt;
&lt;span class="nv"&gt;$status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Status&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Pending&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$status&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getLabel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Output: Pending&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Enum'ların Avantajları
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Güvenlik:&lt;/strong&gt; Hataları ve yanlış değerleri önler.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Okunabilirlik:&lt;/strong&gt; Kodun daha anlaşılır ve okunabilir olmasını sağlar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bakım Kolaylığı:&lt;/strong&gt; Değerlerin yönetimini ve güncellenmesini kolaylaştırır.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tutarlılık:&lt;/strong&gt; Değerlerin tutarlı bir şekilde kullanılmasını sağlar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Özetleyelim
&lt;/h3&gt;

&lt;p&gt;PHP 8.1 ile birlikte gelen enum'lar, kodunuzun güvenliğini, okunabilirliğini ve bakımını büyük ölçüde artırır. Belirli sabit değerlerin kullanıldığı her yerde enum'ları tercih ederek kodunuzu daha sağlam ve anlaşılır hale getirebilirsiniz. Özellikle durum yönetimi, hata kodları ve rol yönetimi gibi alanlarda enum'ların gücünden faydalanmak, yazılım geliştirme sürecinizi daha verimli hale getirecektir.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>#2 PHP’de Final Sınıflar ve Readonly Sınıflar: Readonly Class</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Tue, 11 Jun 2024 07:15:59 +0000</pubDate>
      <link>https://dev.to/baris/2-phpde-final-siniflar-ve-readonly-siniflar-readonly-class-1ci6</link>
      <guid>https://dev.to/baris/2-phpde-final-siniflar-ve-readonly-siniflar-readonly-class-1ci6</guid>
      <description>&lt;p&gt;Readonly sınıflar, PHP 8.2 ile birlikte tanıtılan bir özelliktir. Readonly sınıflar, sınıfın tüm özelliklerinin (properties) yalnızca okunabilir olduğu ve yalnızca sınıfın oluşturulması (instantiation) sırasında atanabileceği anlamına gelir. Bu sınıflar, veri tutarlılığını sağlamak ve nesnelerin durumlarının değiştirilmesini önlemek için kullanılır.&lt;/p&gt;

&lt;h3&gt;
  
  
  Readonly Sınıflar Nedir?
&lt;/h3&gt;

&lt;p&gt;Readonly sınıflar, tüm özelliklerin &lt;code&gt;readonly&lt;/code&gt; olduğu sınıflardır. Bu, sınıfın tüm özelliklerinin sadece okunabilir olduğu ve oluşturulduktan sonra değiştirilemeyeceği anlamına gelir. &lt;/p&gt;

&lt;h3&gt;
  
  
  Readonly Sınıf Tanımlaması
&lt;/h3&gt;

&lt;p&gt;Readonly sınıflar şu şekilde tanımlanır:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Point&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Özelliklere atama yapılabilir:&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$point&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 10&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$point&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 20&lt;/span&gt;

&lt;span class="c1"&gt;// Ancak özellikler değiştirilemez:&lt;/span&gt;
&lt;span class="nv"&gt;$point&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Hata: Cannot modify readonly property Point::$x&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Neden Readonly Sınıflara İhtiyaç Duyarız?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Veri Tutarlılığı:&lt;/strong&gt; Readonly sınıflar, bir nesnenin durumunun değişmesini önleyerek veri tutarlılığını sağlar. Bu, özellikle kritik sistemlerde ve önemli verilerin manipülasyonunun istenmediği durumlarda önemlidir.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Güvenlik:&lt;/strong&gt; Readonly sınıflar, nesnelerin durumunun değiştirilememesi gereken durumlarda güvenliği artırır. Bu, hatalı veya kötü niyetli kodun veri üzerinde değişiklik yapmasını önler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kolay Anlaşılabilirlik:&lt;/strong&gt; Readonly sınıflar, sınıfın kullanımını daha anlaşılır hale getirir. Bir sınıfın tüm özelliklerinin yalnızca okunabilir olduğunu bilmek, kodun nasıl çalıştığını anlamayı kolaylaştırır.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Yan Etkiyi Azaltma:&lt;/strong&gt; Nesnelerin durumunun değiştirilememesi, yan etkileri azaltır ve kodun daha tahmin edilebilir olmasını sağlar. Bu, özellikle fonksiyonel programlamada ve yan etkilerin minimumda tutulması gereken durumlarda faydalıdır.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Örnek Kullanım Senaryoları
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Koordinatlar veya Noktalar:&lt;/strong&gt; Coğrafi koordinatlar gibi değişmemesi gereken verileri tutmak için kullanılabilir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Konfigürasyon Verileri:&lt;/strong&gt; Uygulamanın çalışma süresince değişmemesi gereken konfigürasyon ayarlarını tutmak için kullanılabilir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kimlik Bilgileri:&lt;/strong&gt; Kullanıcı kimlik bilgileri gibi, değiştirilemez olması gereken verileri saklamak için kullanılabilir.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Readonly Sınıfların Alternatifleri
&lt;/h3&gt;

&lt;p&gt;Readonly sınıflar kullanılmadan önce, benzer işlevselliği sağlamak için getter metotları ve özel setter metotları kullanılırdı. Ancak bu yöntemler, readonly sınıflar kadar doğrudan ve anlaşılır değildir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Point&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getX&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getY&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Özelliklere atama yapılabilir:&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$point&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getX&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 10&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$point&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getY&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 20&lt;/span&gt;

&lt;span class="c1"&gt;// Ancak özellikler değiştirilemez:&lt;/span&gt;
&lt;span class="nv"&gt;$point&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Hata: Cannot access private property Point::$x&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>#1 PHP’de Final Sınıflar ve Readonly Sınıflar: Final Class</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Tue, 11 Jun 2024 07:14:52 +0000</pubDate>
      <link>https://dev.to/baris/1-phpde-final-siniflar-ve-readonly-siniflar-final-class-2m4o</link>
      <guid>https://dev.to/baris/1-phpde-final-siniflar-ve-readonly-siniflar-final-class-2m4o</guid>
      <description>&lt;h3&gt;
  
  
  Final Sınıflar Nedir?
&lt;/h3&gt;

&lt;p&gt;Final sınıflar, başka bir sınıf tarafından kalıtılamayan (inheritance) sınıflardır. Bir sınıfı final olarak tanımlamak, o sınıfın alt sınıflarının oluşturulmasını engeller. PHP'de bir sınıfı &lt;code&gt;final&lt;/code&gt; anahtar kelimesiyle tanımlayarak bu sınırlamayı getirebilirsiniz.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Sınıf Tanımlaması
&lt;/h3&gt;

&lt;p&gt;Final sınıflar şu şekilde tanımlanır:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FinalClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;sayHello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello from FinalClass!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Hata: FinalClass'tan türetilemez&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AnotherClass&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;FinalClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$finalClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FinalClass&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$finalClass&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;sayHello&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// "Hello from FinalClass!"&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Neden Final Sınıflara İhtiyaç Duyarız?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tasarımın Korunması:&lt;/strong&gt; Final sınıflar, bir sınıfın tasarımının korunmasını sağlar. Sınıfın davranışının değiştirilmesini veya genişletilmesini istemediğiniz durumlarda kullanılır.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Güvenlik:&lt;/strong&gt; Özellikle güvenlik açısından kritik sınıfların veya hassas işlevlerin değiştirilememesi gerektiğinde kullanılır.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performans:&lt;/strong&gt; PHP'de final sınıflar, JVM (Java Virtual Machine) gibi dillerde olduğu kadar belirgin olmasa da, performans iyileştirmeleri sağlayabilir. Derleyici, final sınıfların kalıtılmayacağını bilerek optimizasyon yapabilir.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Örnek Kullanım Senaryoları
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Utility Sınıflar:&lt;/strong&gt; Helper veya utility fonksiyonları içeren sınıflar genellikle final olarak tanımlanır çünkü bu sınıfların kalıtılması genellikle mantıklı değildir.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Singleton Deseni:&lt;/strong&gt; Singleton tasarım deseninde kullanılan sınıfın yalnızca bir kez örneklenmesini ve kalıtılmasını önlemek için final olarak tanımlanır.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Güvenlik Katmanları:&lt;/strong&gt; Belirli bir güvenlik politikası uygulayan sınıflar, bu politikaların değiştirilememesi için final olarak tanımlanabilir.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Final Metotlar
&lt;/h3&gt;

&lt;p&gt;Ayrıca, sınıfın kendisi olmasa da, belirli metotları &lt;code&gt;final&lt;/code&gt; olarak tanımlayabilirsiniz. Bu, metodun alt sınıflar tarafından geçersiz kılınmasını (override) engeller.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BaseClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;final&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;sayHello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello from BaseClass!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DerivedClass&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;BaseClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Hata: final method BaseClass::sayHello cannot be overridden&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;sayHello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello from DerivedClass!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$baseClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BaseClass&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$baseClass&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;sayHello&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// "Hello from BaseClass!"&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Laravel’de İlişkiler: `belongsToMany` ve `hasMany` Arasındaki Farklar</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Mon, 10 Jun 2024 08:50:46 +0000</pubDate>
      <link>https://dev.to/baris/laravelde-iliskiler-belongstomany-ve-hasmany-arasindaki-farklar-1f4i</link>
      <guid>https://dev.to/baris/laravelde-iliskiler-belongstomany-ve-hasmany-arasindaki-farklar-1f4i</guid>
      <description>&lt;p&gt;Laravel, Eloquent ORM (Object-Relational Mapping) yapısı ile veritabanı işlemlerini oldukça kolaylaştırır. Bu yazıda, &lt;code&gt;belongsToMany&lt;/code&gt; ve &lt;code&gt;hasMany&lt;/code&gt; ilişkileri arasındaki farkları ele alacağız. Bu iki ilişki türünü anlamak, veritabanı modelleriniz arasında doğru bağlantıları kurmak için kritik öneme sahiptir.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;hasMany&lt;/code&gt; İlişkisi
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;hasMany&lt;/code&gt; ilişkisi, bir modelin diğer birçok modele sahip olduğunu belirtir. Bu ilişki genellikle "bir-çok" (one-to-many) ilişkisidir. Örneğin, bir kullanıcının (User) birden fazla gönderisi (Post) olabilir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Kullanıcı (User) ve Gönderiler (Posts) Örneği
&lt;/h5&gt;

&lt;p&gt;Bir Kullanıcı modelinin birden fazla Gönderi modeli olabilir. Bu durumda, Kullanıcı modelinde &lt;code&gt;hasMany&lt;/code&gt; fonksiyonunu tanımlarız.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// User modelinde&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hasMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Burada, &lt;code&gt;posts&lt;/code&gt; metodu, bu kullanıcının sahip olduğu gönderileri alır. &lt;code&gt;Post&lt;/code&gt; modelinde ise, her gönderinin bir kullanıcıya ait olduğunu belirtiriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Post modelinde&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu şekilde, her gönderinin bir kullanıcıya ait olduğunu belirten &lt;code&gt;user&lt;/code&gt; metodunu tanımlamış oluruz. Bu ilişki, veritabanında genellikle şu şekilde temsil edilir: &lt;code&gt;posts&lt;/code&gt; tablosunda bir &lt;code&gt;user_id&lt;/code&gt; sütunu bulunur ve bu sütun, gönderinin hangi kullanıcıya ait olduğunu belirtir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Özet:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;hasMany&lt;/code&gt;&lt;/strong&gt;: Bir modelin diğer birçok modele sahip olduğunu belirtir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;belongsTo&lt;/code&gt;&lt;/strong&gt;: Bir modelin, belirli bir modele ait olduğunu belirtir.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;belongsToMany&lt;/code&gt; İlişkisi
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;belongsToMany&lt;/code&gt; ilişkisi, birçok modelin diğer birçok modele ait olduğunu belirtir. Bu ilişki genellikle "çok-çok" (many-to-many) ilişkisidir. Bu tür ilişkilerde, her iki tablo da birbirine birçok kez bağlı olabilir ve bu bağlantıları temsil eden bir ara tablo (pivot table) kullanılır.&lt;/p&gt;

&lt;h5&gt;
  
  
  Öğrenciler (Students) ve Dersler (Courses) Örneği
&lt;/h5&gt;

&lt;p&gt;Bir öğrenci birçok derse kaydolabilir ve bir ders birçok öğrenci tarafından alınabilir. Bu durumda, her iki modelde de &lt;code&gt;belongsToMany&lt;/code&gt; fonksiyonunu tanımlarız.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Student modelinde&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;courses&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsToMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Course&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Burada, &lt;code&gt;courses&lt;/code&gt; metodu, öğrencinin kayıtlı olduğu dersleri alır. Benzer şekilde, &lt;code&gt;Course&lt;/code&gt; modelinde, bu dersin kayıtlı olduğu öğrencileri belirtiriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Course modelinde&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;students&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsToMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Student&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu tür ilişkilerde, ara tablo (pivot table) kullanılır. Bu tablo, her iki modelin ID’lerini içeren iki sütuna sahip olur. Örneğin, &lt;code&gt;course_student&lt;/code&gt; adında bir ara tablo olabilir ve bu tablo &lt;code&gt;student_id&lt;/code&gt; ve &lt;code&gt;course_id&lt;/code&gt; sütunlarını içerir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Özet:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;belongsToMany&lt;/code&gt;&lt;/strong&gt;: Birçok modelin diğer birçok modele ait olduğunu belirtir.&lt;/li&gt;
&lt;li&gt;Ara tablo (pivot table) kullanılır.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Örnek Projeler ve Kullanım Senaryoları
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Blog Uygulaması: &lt;code&gt;User&lt;/code&gt; ve &lt;code&gt;Post&lt;/code&gt; İlişkisi
&lt;/h4&gt;

&lt;p&gt;Bir blog uygulaması düşünelim. Her kullanıcının birçok gönderisi olabilir. Bu ilişkiyi &lt;code&gt;hasMany&lt;/code&gt; ve &lt;code&gt;belongsTo&lt;/code&gt; ilişkileri ile kurabiliriz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Modeli:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hasMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Post Modeli:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Eğitim Yönetim Sistemi: &lt;code&gt;Student&lt;/code&gt; ve &lt;code&gt;Course&lt;/code&gt; İlişkisi
&lt;/h4&gt;

&lt;p&gt;Bir eğitim yönetim sistemi düşünelim. Öğrenciler birçok derse kayıt olabilir ve dersler birçok öğrenci tarafından alınabilir. Bu ilişkiyi &lt;code&gt;belongsToMany&lt;/code&gt; ile kurabiliriz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student Modeli:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;courses&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsToMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Course&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Course Modeli:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Course&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;students&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsToMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Student&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu ilişkileri tanımladıktan sonra, veritabanında &lt;code&gt;course_student&lt;/code&gt; adında bir ara tablo oluştururuz. Bu tablo, &lt;code&gt;student_id&lt;/code&gt; ve &lt;code&gt;course_id&lt;/code&gt; sütunlarını içerir.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sonuç
&lt;/h3&gt;

&lt;p&gt;Laravel’de ilişkileri anlamak, veritabanı modelleri arasında doğru bağlantıları kurabilmek için oldukça önemlidir. &lt;code&gt;hasMany&lt;/code&gt; ilişkisi, bir modelin diğer birçok modele sahip olduğu durumlarda kullanılırken, &lt;code&gt;belongsToMany&lt;/code&gt; ilişkisi, birçok modelin diğer birçok modele ait olduğu durumlarda kullanılır.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Laravel'de Eloquent ORM İlişkileri: Junior'a Yönelik Kapsamlı Rehber</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Mon, 10 Jun 2024 08:28:52 +0000</pubDate>
      <link>https://dev.to/baris/laravelde-eloquent-orm-iliskileri-juniora-yonelik-kapsamli-rehber-5559</link>
      <guid>https://dev.to/baris/laravelde-eloquent-orm-iliskileri-juniora-yonelik-kapsamli-rehber-5559</guid>
      <description>&lt;p&gt;Laravel'de Eloquent ORM (Object-Relational Mapping), veritabanı ile çalışmayı oldukça kolay ve etkili hale getirir. Eloquent ORM, veritabanı tablolarımızı ve bu tablolar arasındaki ilişkileri kolayca tanımlamamıza ve yönetmemize olanak sağlar. Bu makalede, Eloquent ORM ilişkilerini ayrıntılı bir şekilde ele alacağız. "BelongsToMany", "HasMany" gibi ilişkilerin ne olduğunu, hangi durumlarda kullanıldığını ve nasıl kullanıldığını örnek kodlarla açıklayacağız.&lt;/p&gt;

&lt;h3&gt;
  
  
  Eloquent ORM İlişki Türleri
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. One-to-One (Bire Bir) İlişkisi
&lt;/h4&gt;

&lt;p&gt;Bir bire bir ilişkisi, bir tablodaki bir kaydın başka bir tablodaki bir kayda bağlanmasıdır. Örneğin, bir kullanıcının yalnızca bir profili olabilir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Örnek:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Bir &lt;code&gt;User&lt;/code&gt; ve &lt;code&gt;Profile&lt;/code&gt; tabloları olduğunu varsayalım. Her kullanıcının yalnızca bir profili vardır.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;User Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hasOne&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Profile Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu ilişkide, &lt;code&gt;users&lt;/code&gt; tablosu &lt;code&gt;profiles&lt;/code&gt; tablosuyla bire bir ilişkilidir. &lt;code&gt;User&lt;/code&gt; modelinde &lt;code&gt;hasOne(Profile::class)&lt;/code&gt; yöntemi kullanılır çünkü bir kullanıcı sadece bir profile sahip olabilir. &lt;code&gt;Profile&lt;/code&gt; modelinde &lt;code&gt;belongsTo(User::class)&lt;/code&gt; yöntemi kullanılır çünkü bir profil bir kullanıcıya aittir.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. One-to-Many (Bire Çok) İlişkisi
&lt;/h4&gt;

&lt;p&gt;Bir bire çok ilişkisi, bir tablodaki bir kaydın başka bir tablodaki birden fazla kayda bağlanmasıdır. Örneğin, bir kullanıcının birden fazla blog gönderisi olabilir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Örnek:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Bir &lt;code&gt;User&lt;/code&gt; ve &lt;code&gt;Post&lt;/code&gt; tabloları olduğunu varsayalım. Her kullanıcının birden fazla blog gönderisi olabilir.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;User Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hasMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Post Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu ilişkide, &lt;code&gt;users&lt;/code&gt; tablosu &lt;code&gt;posts&lt;/code&gt; tablosuyla bire çok ilişkilidir. &lt;code&gt;User&lt;/code&gt; modelinde &lt;code&gt;hasMany(Post::class)&lt;/code&gt; yöntemi kullanılır çünkü bir kullanıcı birçok blog gönderisine sahip olabilir. &lt;code&gt;Post&lt;/code&gt; modelinde &lt;code&gt;belongsTo(User::class)&lt;/code&gt; yöntemi kullanılır çünkü bir blog gönderisi bir kullanıcıya aittir.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Many-to-Many (Çoktan Çoğa) İlişkisi
&lt;/h4&gt;

&lt;p&gt;Bir çoktan çoğa ilişkisi, bir tablodaki birçok kaydın başka bir tablodaki birçok kayda bağlanmasıdır. Örneğin, bir öğrencinin birçok kursu olabilir ve bir kursun birçok öğrencisi olabilir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Örnek:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Bir &lt;code&gt;Student&lt;/code&gt; ve &lt;code&gt;Course&lt;/code&gt; tabloları olduğunu varsayalım. Her öğrencinin birçok kursu olabilir ve her kursun birçok öğrencisi olabilir. Bu tür ilişkilerde genellikle ara bir tablo (pivot table) kullanılır.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Student Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;courses&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsToMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Course&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Course Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Course&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;students&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsToMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Student&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ara tablo genellikle iki tablonun isimlerinin birleşiminden oluşur, örneğin &lt;code&gt;course_student&lt;/code&gt;. Bu tablo, &lt;code&gt;student_id&lt;/code&gt; ve &lt;code&gt;course_id&lt;/code&gt; sütunlarını içerir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migration Örneği:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'course_student'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreignId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'student_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;constrained&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'cascade'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreignId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'course_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;constrained&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'cascade'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Has Many Through (Dolaylı Bire Çok) İlişkisi
&lt;/h4&gt;

&lt;p&gt;Dolaylı bire çok ilişkisi, bir modelin, bir başka model üzerinden ilişkili olduğu birçok modelin varlığı durumudur. Örneğin, bir ülkenin birçok şehri ve şehirlerin de birçok kullanıcısı olabilir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Örnek:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Bir &lt;code&gt;Country&lt;/code&gt;, &lt;code&gt;City&lt;/code&gt; ve &lt;code&gt;User&lt;/code&gt; tabloları olduğunu varsayalım. Her ülkenin birçok şehri ve her şehrin birçok kullanıcısı vardır.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Country Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Country&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hasManyThrough&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;City&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;City Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;City&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Country&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hasMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;User Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;City&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu ilişkide, &lt;code&gt;countries&lt;/code&gt; tablosu &lt;code&gt;users&lt;/code&gt; tablosuna &lt;code&gt;cities&lt;/code&gt; tablosu üzerinden dolaylı olarak bağlıdır.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Polymorphic Relations (Çok Biçimli İlişkiler)
&lt;/h4&gt;

&lt;p&gt;Çok biçimli ilişkiler, farklı modellerin aynı ilişkisel yapıyı paylaşmasına izin verir. Örneğin, hem &lt;code&gt;Post&lt;/code&gt; hem de &lt;code&gt;Video&lt;/code&gt; modellerinin yorumları olabilir.&lt;/p&gt;

&lt;h5&gt;
  
  
  Örnek:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Bir &lt;code&gt;Post&lt;/code&gt;, &lt;code&gt;Video&lt;/code&gt; ve &lt;code&gt;Comment&lt;/code&gt; tabloları olduğunu varsayalım. Hem gönderilerin hem de videoların yorumları olabilir.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Post Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;morphMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Comment&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'commentable'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Video Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Video&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;morphMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Comment&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'commentable'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Comment Model:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comment&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;commentable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;morphTo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;comments&lt;/code&gt; tablosu, &lt;code&gt;commentable_id&lt;/code&gt; ve &lt;code&gt;commentable_type&lt;/code&gt; sütunlarını içerir. Bu sütunlar, hangi modelin yorumu olduğunu belirtir.&lt;/p&gt;

&lt;h3&gt;
  
  
  Özet
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;hasOne&lt;/code&gt;&lt;/strong&gt;: Bir modelin başka bir modelle bire bir ilişkili olduğunu belirtir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;belongsTo&lt;/code&gt;&lt;/strong&gt;: Bir modelin başka bir modelin bir parçası olduğunu belirtir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;hasMany&lt;/code&gt;&lt;/strong&gt;: Bir modelin başka bir modelle bire çok ilişkili olduğunu belirtir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;belongsToMany&lt;/code&gt;&lt;/strong&gt;: Bir modelin başka bir modelle çoktan çoğa ilişkili olduğunu belirtir.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Kullanım Senaryoları
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;hasOne&lt;/code&gt;: Bir kullanıcının yalnızca bir profili olduğunda.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;belongsTo&lt;/code&gt;: Bir profilin yalnızca bir kullanıcısı olduğunda.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;hasMany&lt;/code&gt;: Bir kullanıcının birden fazla blog gönderisi olduğunda.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;belongsToMany&lt;/code&gt;: Bir öğrencinin birçok kursu ve bir kursun birçok öğrencisi olduğunda.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
