<?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>Forem: Barış Bideratan</title>
    <description>The latest articles on Forem by Barış Bideratan (@baris).</description>
    <link>https://forem.com/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>Forem: Barış Bideratan</title>
      <link>https://forem.com/baris</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/baris"/>
    <language>en</language>
    <item>
      <title>API Endpoint Tasarımında Küçük Bir Detay, Büyük Bir Fark</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Mon, 11 May 2026 12:37:21 +0000</pubDate>
      <link>https://forem.com/baris/api-endpoint-tasariminda-kucuk-bir-detay-buyuk-bir-fark-hm9</link>
      <guid>https://forem.com/baris/api-endpoint-tasariminda-kucuk-bir-detay-buyuk-bir-fark-hm9</guid>
      <description>&lt;p&gt;Geçenlerde X’te gezinirken bir gönderiye denk geldim. Bir junior geliştiricinin tasarladığı iki endpoint paylaşılmıştı ve buradaki tasarım hatasının ne olduğu soruluyordu.&lt;/p&gt;

&lt;p&gt;Endpoint’ler şunlardı:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers/verified&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers/unverified&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;İlk bakışta çalışır gibi görünüyor. Hatta ne yapmak istediği de gayet anlaşılır: doğrulanmış takipçileri getir, doğrulanmamış takipçileri getir.&lt;/p&gt;

&lt;p&gt;Ama API tasarımında mesele sadece “anlaşılıyor mu?” değil. Asıl mesele, doğru modellenmiş mi?&lt;/p&gt;

&lt;p&gt;Buradaki problem şu: &lt;code&gt;verified&lt;/code&gt; ve &lt;code&gt;unverified&lt;/code&gt;, sanki &lt;code&gt;followers&lt;/code&gt; altında ayrı birer kaynakmış gibi davranıyor. Oysa burada gerçek kaynak &lt;code&gt;followers&lt;/code&gt;. &lt;code&gt;verified&lt;/code&gt; ise bu kaynağın bir özelliği, yani filtreleme kriteri.&lt;/p&gt;

&lt;p&gt;Daha temiz yaklaşım şu olurdu:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?verified=true&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?verified=false&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Burada ayrım çok daha net.&lt;/p&gt;

&lt;p&gt;Path bize hangi kaynağa eriştiğimizi söylüyor: &lt;code&gt;followers&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Query parametre ise bu kaynağı nasıl filtreleyeceğimizi söylüyor: &lt;code&gt;verified=true&lt;/code&gt; veya &lt;code&gt;verified=false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Bence iyi API tasarımında en kritik ayrımlardan biri bu:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Path resource’u anlatır, query parametre filtreyi anlatır.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bu ayrım küçük gibi görünüyor ama proje büyüdükçe ciddi fark yaratıyor.&lt;/p&gt;

&lt;p&gt;Bugün sadece iki durum olabilir: verified ve unverified. Ama yarın işin içine pending, blocked, suspended, muted gibi başka durumlar da girebilir. Eğer her durumu ayrı endpoint olarak tasarlarsak API bir süre sonra şuna döner:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/followers/verified&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/followers/unverified&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/followers/pending&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/followers/blocked&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/followers/suspended&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Bu yapı hem gereksiz endpoint kalabalığı oluşturur hem de aynı listeleme mantığını farklı route’lara dağıtır. Halbuki tek bir listeleme endpoint’i üzerinden bunu çok daha temiz yönetebiliriz:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=verified&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=unverified&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=pending&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=blocked&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Burada &lt;code&gt;status&lt;/code&gt; kullanmak, özellikle ileride farklı durumlar eklenecekse daha esnek bir tercih olur. Eğer sistem gerçekten sadece doğrulanmış/doğrulanmamış bilgisinden ibaretse &lt;code&gt;verified=true/false&lt;/code&gt; yeterli olabilir. Ama domain büyüyecekse &lt;code&gt;status&lt;/code&gt; daha sağlıklı modelleme sağlar.&lt;/p&gt;

&lt;p&gt;Bu örnek bana şunu tekrar hatırlattı: API tasarımı sadece route yazmak değil, aynı zamanda domain’i doğru okumak işi.&lt;/p&gt;

&lt;p&gt;“Ben burada neyi kaynak olarak görüyorum, neyi filtre olarak görüyorum?” sorusunu doğru sormak gerekiyor.&lt;/p&gt;

&lt;p&gt;Çünkü yanlış modelleme ilk başta çok sorun çıkarmayabilir. Endpoint çalışır, frontend veriyi alır, herkes yoluna devam eder. Ama birkaç ay sonra yeni filtreler, yeni durumlar, yeni listeleme ihtiyaçları geldikçe tasarımın zayıf tarafları ortaya çıkar.&lt;/p&gt;

&lt;p&gt;Ben olsam bu örnekte endpoint’i şöyle tasarlardım:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?verified=true&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;veya daha geniş düşünüyorsam:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=verified&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Aynı endpoint üzerine sayfalama, sıralama ve arama da rahatça eklenebilir:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=verified&amp;amp;page=2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=verified&amp;amp;sort=created_at&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/v1/followers?status=verified&amp;amp;search=baris&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Böylece hem endpoint sayısı artmaz hem de API’nin davranışı daha tahmin edilebilir olur.&lt;/p&gt;

&lt;p&gt;Kısacası, &lt;code&gt;/followers/verified&lt;/code&gt; çalışabilir ama iyi modellenmiş bir endpoint değildir. Çünkü &lt;code&gt;verified&lt;/code&gt; burada ayrı bir kaynak değil, &lt;code&gt;followers&lt;/code&gt; listesinin filtresidir.&lt;/p&gt;

&lt;p&gt;Özetle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource path’te durur. Filtre query parametrede durur.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>architecture</category>
      <category>backend</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Laravel’de Backed Enum Nedir? Pure Enum ile Farkı Ne?</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Sat, 09 May 2026 15:52:58 +0000</pubDate>
      <link>https://forem.com/baris/laravelde-backed-enum-nedir-pure-enum-ile-farki-ne-170n</link>
      <guid>https://forem.com/baris/laravelde-backed-enum-nedir-pure-enum-ile-farki-ne-170n</guid>
      <description>&lt;p&gt;Laravel’de enum kullanmaya başlayınca ilk karşılaşılan kavramlardan biri şu oluyor:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Backed enum ne demek?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;İlk bakışta biraz “fazla akademik” gibi duran bir terim. Ama aslında olay oldukça basit:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Backed enum, her enum case’inin arkasında gerçek bir &lt;code&gt;string&lt;/code&gt; veya &lt;code&gt;int&lt;/code&gt; değer taşıdığı enum türüdür.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yani enum sadece PHP tarafında sembolik bir isimden ibaret değildir; aynı zamanda veritabanına yazılabilecek, request’ten gelebilecek veya API response’unda kullanılabilecek gerçek bir değere sahiptir.&lt;/p&gt;

&lt;p&gt;Bu yazıda Laravel üzerinden backed enum mantığını, pure enum’dan farkını ve günlük projelerde nasıl kullanılacağını anlatacağım.&lt;/p&gt;


&lt;h2&gt;
  
  
  Enum nedir?
&lt;/h2&gt;

&lt;p&gt;Enum, belirli bir alanın alabileceği değerleri kontrollü hale getiren bir yapıdır.&lt;/p&gt;

&lt;p&gt;Mesela bir kullanıcı rolü 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="n"&gt;admin&lt;/span&gt;
&lt;span class="n"&gt;editor&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Normalde bunları string olarak kullanabiliriz:&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;if&lt;/span&gt; &lt;span class="p"&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;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;'admin'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ama bu kullanımın birkaç problemi var:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yazım hatalarına açık.&lt;/li&gt;
&lt;li&gt;Her yerde string tekrar ediyor.&lt;/li&gt;
&lt;li&gt;IDE desteği zayıf.&lt;/li&gt;
&lt;li&gt;Refactor yapmak zorlaşıyor.&lt;/li&gt;
&lt;li&gt;Sistemde hangi roller var, tek bir yerden anlaşılmıyor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enum ile bu değerleri tek bir yerde topları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="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Enums&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;string&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;Admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'admin'&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;Editor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'editor'&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;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'user'&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;Artık rol kontrolünü şöyle yapabiliriz:&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;if&lt;/span&gt; &lt;span class="p"&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;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&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 hem daha okunabilir hem de daha güvenli.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pure Enum ve Backed Enum farkı
&lt;/h2&gt;

&lt;p&gt;PHP’de temel olarak iki enum türü var:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pure enum&lt;/li&gt;
&lt;li&gt;Backed enum&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Laravel’de de aslında bu PHP enum’larını kullanıyoruz. Laravel burada enum’ları model cast, validation ve request işlemlerinde daha pratik hale getiriyor.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pure Enum nedir?
&lt;/h2&gt;

&lt;p&gt;Pure enum, case’lerin arkasında herhangi bir değer taşımadığı enum türüdü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="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;UserRole&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;Admin&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;Editor&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;User&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;Admin&lt;/code&gt;, &lt;code&gt;Editor&lt;/code&gt; ve &lt;code&gt;User&lt;/code&gt; sadece enum case’leridir.&lt;/p&gt;

&lt;p&gt;Şunu yapabiliriz:&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;$role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ama şunu yapamayı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="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Çünkü pure enum’da &lt;code&gt;value&lt;/code&gt; yoktur.&lt;/p&gt;

&lt;p&gt;Sadece &lt;code&gt;name&lt;/code&gt; vardı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="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&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="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "Admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pure enum daha çok uygulama içinde sembolik durumları belirtmek için kullanılabilir. Fakat veritabanına değer yazmak istediğimiz senaryolarda genellikle yeterli olmaz.&lt;/p&gt;




&lt;h2&gt;
  
  
  Backed Enum nedir?
&lt;/h2&gt;

&lt;p&gt;Backed enum’da her case’in arkasında gerçek bir değer bulunur.&lt;/p&gt;

&lt;p&gt;Bu değer yalnızca iki tür olabilir:&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="n"&gt;string&lt;/span&gt;
&lt;span class="n"&gt;int&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Örneğin:&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\Enums&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;string&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;Admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'admin'&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;Editor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'editor'&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;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'user'&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 enum case’i şudur:&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;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu case’in arkasındaki gerçek değer ise şudur:&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;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yani:&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;case&lt;/span&gt; &lt;span class="nc"&gt;Admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'admin'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;satırında iki farklı şey 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="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&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="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// "Admin"&lt;/span&gt;
&lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;name&lt;/code&gt;, PHP tarafındaki case adıdır.&lt;br&gt;
&lt;code&gt;value&lt;/code&gt;, dış dünyaya veya veritabanına yazılacak gerçek değerdir.&lt;/p&gt;


&lt;h2&gt;
  
  
  Backed enum neden Laravel’de daha çok kullanılır?
&lt;/h2&gt;

&lt;p&gt;Çünkü Laravel projelerinde enum kullandığımız alanların çoğu veritabanıyla ilişkilidir.&lt;/p&gt;

&lt;p&gt;Örneğin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;role&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;payment_status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;order_status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;notification_channel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;provider&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bu alanların veritabanında bir karşılığı vardır.&lt;/p&gt;

&lt;p&gt;Mesela &lt;code&gt;users&lt;/code&gt; tablosunda şöyle bir değer tutmak isteriz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;role = admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ama PHP tarafında bu değeri düz string olarak kontrol etmek yerine enum olarak kullanmak isteriz:&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;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;İşte backed enum burada çok işe yarar.&lt;/p&gt;




&lt;h2&gt;
  
  
  Laravel’de enum dosyası oluşturmak
&lt;/h2&gt;

&lt;p&gt;Laravel’de enum oluşturmak için Artisan komutu kullanılabilir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan make:enum Enums/UserRole
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu komutla enum dosyasını &lt;code&gt;app/Enums/UserRole.php&lt;/code&gt; altında tutabiliriz.&lt;/p&gt;

&lt;p&gt;Örnek enum:&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\Enums&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;string&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;Admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'admin'&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;Editor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'editor'&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;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'user'&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;Ben genelde enum’ları &lt;code&gt;app/Enums&lt;/code&gt; klasörü altında tutmayı daha düzenli buluyorum. Çünkü proje büyüdükçe enum sayısı artıyor ve bunların &lt;code&gt;app&lt;/code&gt; dizininin altında dağınık durması pek hoş olmuyor.&lt;/p&gt;




&lt;h2&gt;
  
  
  Laravel model cast ile kullanım
&lt;/h2&gt;

&lt;p&gt;Enum’un en güzel taraflarından biri, Laravel model cast ile çok temiz çalışmasıdır.&lt;/p&gt;

&lt;p&gt;Örneğin &lt;code&gt;users&lt;/code&gt; tablosunda &lt;code&gt;role&lt;/code&gt; alanımız olsun.&lt;/p&gt;

&lt;p&gt;Migration tarafında bunu basit bir string kolon olarak tutabiliriz:&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;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'role'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modelde ise cast 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="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Enums\UserRole&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;casts&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;array&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="s1"&gt;'role'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;UserRole&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;Bundan sonra Laravel, veritabanındaki string değeri otomatik olarak enum’a çevirir.&lt;/p&gt;

&lt;p&gt;Yani veritabanında şu varsa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;role = admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modelde şunu elde ederiz:&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;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// UserRole::Admin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Artık kontrolü şöyle yapabiliriz:&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;if&lt;/span&gt; &lt;span class="p"&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;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Admin işlemleri&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kaydetmek de oldukça temizdir:&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;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Editor&lt;/span&gt;&lt;span class="p"&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="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Laravel bunu veritabanına otomatik olarak şöyle yazar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;editor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Burada bizim manuel olarak &lt;code&gt;-&amp;gt;value&lt;/code&gt; vermemize gerek kalmaz. Laravel enum cast sayesinde bunu bizim yerimize halleder.&lt;/p&gt;




&lt;h2&gt;
  
  
  Form request ve validation tarafı
&lt;/h2&gt;

&lt;p&gt;Backed enum’ları request doğrulamada da kullanabiliriz.&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;use&lt;/span&gt; &lt;span class="nc"&gt;App\Enums\UserRole&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\Validation\Rule&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'role'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'required'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Rule&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;UserRole&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 sayede &lt;code&gt;role&lt;/code&gt; alanı sadece enum içinde tanımlı değerlerden biri olabilir.&lt;/p&gt;

&lt;p&gt;Yani şunlar geçerlidir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;admin
editor
user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ama şu geçerli olmaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;super_admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu küçük gibi görünen şey aslında büyük projelerde ciddi fayda sağlar. Çünkü veri daha sisteme girerken kontrol altına alınır.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;from()&lt;/code&gt; ve &lt;code&gt;tryFrom()&lt;/code&gt; farkı
&lt;/h2&gt;

&lt;p&gt;Backed enum’ların güzel özelliklerinden biri de string veya int değerden enum case’i oluşturabilmemizdir.&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;$role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'admin'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu bize şunu döndürü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="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ama dikkat etmek gerekir. Eğer geçersiz bir değer verirsek:&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;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wrong-role'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP hata fırlatır.&lt;/p&gt;

&lt;p&gt;Daha güvenli kullanım için &lt;code&gt;tryFrom()&lt;/code&gt; tercih edilebilir:&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;$role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;tryFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'admin'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Geçerli değer varsa enum case’i döner:&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;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Geçersiz değer varsa &lt;code&gt;null&lt;/code&gt; döner:&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;$role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;tryFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wrong-role'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// null&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ben genelde dışarıdan gelen, güvenmediğim verilerde &lt;code&gt;tryFrom()&lt;/code&gt; kullanmayı daha doğru buluyorum.&lt;/p&gt;




&lt;h2&gt;
  
  
  Enum içine yardımcı metotlar eklemek
&lt;/h2&gt;

&lt;p&gt;Enum’lar sadece sabit değer listesi olmak zorunda değil. İçlerine metot da ekleyebiliriz.&lt;/p&gt;

&lt;p&gt;Mesela kullanıcı rollerine ekranda gösterilecek label değerleri ekleyelim:&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\Enums&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;string&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;Admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'admin'&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;Editor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'editor'&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;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'user'&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;label&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;Admin&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Yönetici'&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;Editor&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Editör'&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;User&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Kullanıcı'&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;p&gt;Kullanı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="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;label&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 enum sadece teknik değer tutmaz, aynı zamanda o değere ait davranışı da taşıyabilir.&lt;/p&gt;

&lt;p&gt;Bu özellikle admin panel, select input, filtreleme ve raporlama gibi alanlarda çok işe yarar.&lt;/p&gt;




&lt;h2&gt;
  
  
  Select input için options üretmek
&lt;/h2&gt;

&lt;p&gt;Enum’dan select option üretmek de güzel bir kullanım örneğidir.&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;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;array&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;collect&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="nf"&gt;cases&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;mapWithKeys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;self&lt;/span&gt; &lt;span class="nv"&gt;$role&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="nv"&gt;$role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;label&lt;/span&gt;&lt;span class="p"&gt;(),&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;toArray&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;Artık şunu yapabiliriz:&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;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;options&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Çıktı:&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="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'admin'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Yönetici'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'editor'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Editör'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'user'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Kullanıcı'&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 yaklaşım sayesinde hem backend hem frontend tarafında aynı değerleri daha kontrollü kullanabiliriz.&lt;/p&gt;




&lt;h2&gt;
  
  
  Veritabanında SQL enum mu, string kolon mu?
&lt;/h2&gt;

&lt;p&gt;Burada önemli bir tercih var.&lt;/p&gt;

&lt;p&gt;MySQL tarafında gerçekten &lt;code&gt;enum&lt;/code&gt; kolon tipi kullanabiliriz. Ama ben çoğu Laravel projesinde &lt;code&gt;string&lt;/code&gt; kolon kullanmayı daha esnek buluyorum.&lt;/p&gt;

&lt;p&gt;Örneğin:&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;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'status'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neden?&lt;/p&gt;

&lt;p&gt;Çünkü enum değerleri zamanla değişebilir. Yeni bir status eklemek isteyebiliriz. SQL enum kullanırsak veritabanı şemasını değiştirmek gerekir. String kolon kullanıp uygulama tarafında PHP enum ile kontrol sağlamak genelde daha rahat bir yaklaşımdır.&lt;/p&gt;

&lt;p&gt;Yani kontrolü database seviyesinde değil, uygulama seviyesinde enum ile sağlamış oluruz.&lt;/p&gt;

&lt;p&gt;Bu her zaman tek doğru demek değil. Ama Laravel projelerinde çoğu senaryo için pratik ve sürdürülebilir bir tercih olduğunu düşünüyorum.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ne zaman backed enum kullanmalıyız?
&lt;/h2&gt;

&lt;p&gt;Şu tarz alanlarda backed enum oldukça mantıklıdır:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;role
status
type
category
payment_status
order_status
provider
channel
visibility
priority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mesela:&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="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;OrderStatus&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;string&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="o"&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;case&lt;/span&gt; &lt;span class="nc"&gt;Paid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'paid'&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;Shipped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'shipped'&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;Cancelled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'cancelled'&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;Ya da:&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="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;PaymentStatus&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;string&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;Waiting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'waiting'&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;Successful&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'successful'&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;Failed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'failed'&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 tarz alanlarda backed enum kullanmak, magic string kullanımını ciddi ölçüde azaltır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ne zaman pure enum kullanılır?
&lt;/h2&gt;

&lt;p&gt;Pure enum’u ise daha çok veritabanına yazılmayacak, sadece uygulama içinde anlam taşıyan durumlarda düşünebiliriz.&lt;/p&gt;

&lt;p&gt;Örneğin:&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="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;ModalState&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;Open&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;Closed&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;Ama açık konuşmak gerekirse Laravel projelerinde benim elim çoğu zaman backed enum’a gidiyor. Çünkü genelde bu değerler bir yerden geliyor, bir yere yazılıyor veya API ile dış dünyaya açılıyor.&lt;/p&gt;




&lt;h2&gt;
  
  
  Kötü kullanım örneği
&lt;/h2&gt;

&lt;p&gt;Şöyle bir kod 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;if&lt;/span&gt; &lt;span class="p"&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;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;'admin'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&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;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;'editor'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&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;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;'user'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&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 çalışır. Ama uzun vadede çok güven vermiyor.&lt;/p&gt;

&lt;p&gt;Daha sonra biri yanlışlıkla şöyle yazabilir:&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;if&lt;/span&gt; &lt;span class="p"&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;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;'admn'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP buna kızmaz. Çünkü sonuçta bu da bir string.&lt;/p&gt;

&lt;p&gt;Ama enum kullandığımızda:&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;if&lt;/span&gt; &lt;span class="p"&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;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Admin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;IDE bizi destekler. Refactor kolaylaşır. Yanlış değer kullanma ihtimali azalır. Kodun niyeti daha açık hale gelir.&lt;/p&gt;

&lt;p&gt;Bence enum’un asıl değeri de burada:&lt;br&gt;
Sadece daha “modern” göründüğü için değil, kodun anlamını netleştirdiği için kullanılır.&lt;/p&gt;


&lt;h2&gt;
  
  
  Kısa özet
&lt;/h2&gt;

&lt;p&gt;Backed enum, arkasında gerçek bir &lt;code&gt;string&lt;/code&gt; veya &lt;code&gt;int&lt;/code&gt; değer taşıyan enum türüdür.&lt;/p&gt;

&lt;p&gt;Pure enum:&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="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;UserRole&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;Admin&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;Backed enum:&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="n"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;UserRole&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;string&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;Admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'admin'&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;Laravel projelerinde backed enum özellikle veritabanı, request, validation ve API response gibi alanlarda çok kullanışlıdır.&lt;/p&gt;

&lt;p&gt;Benim genel yaklaşımım şu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Veritabanına yazılacaksa backed enum&lt;/li&gt;
&lt;li&gt;Request’ten gelecekse backed enum&lt;/li&gt;
&lt;li&gt;API’de dönecekse backed enum&lt;/li&gt;
&lt;li&gt;Sadece uygulama içi sembolik bir durumsa pure enum düşünülebilir&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enum kullanmak küçük projede bile kodu daha okunabilir yapar. Büyük projede ise magic string karmaşasını azaltır, refactor sürecini kolaylaştırır ve domain’i daha anlaşılır hale getirir.&lt;/p&gt;

&lt;p&gt;Kısacası, Laravel’de &lt;code&gt;role&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt; gibi alanlarda hâlâ düz string’lerle ilerliyorsak, backed enum’a geçmek çoğu zaman daha temiz bir adımdır.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>enums</category>
      <category>backend</category>
    </item>
    <item>
      <title>Laravel’de Neden Kod İçinde env() Kullanılmamalı?</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Mon, 27 Apr 2026 12:34:09 +0000</pubDate>
      <link>https://forem.com/baris/laravelde-neden-kod-icinde-env-kullanilmamali-7oh</link>
      <guid>https://forem.com/baris/laravelde-neden-kod-icinde-env-kullanilmamali-7oh</guid>
      <description>&lt;p&gt;Laravel projelerinde sık gördüğümüz bir kullanım 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="nv"&gt;$apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;);&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="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'PAYMENT_PROVIDER'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;'iyzico'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Local ortamda bu kod çoğu zaman çalışır. Bu yüzden ilk bakışta yanlış gibi görünmez. Ama Laravel’de genel kural şudur:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;env()&lt;/code&gt; sadece config dosyalarında kullanılmalı, uygulama kodunda &lt;code&gt;config()&lt;/code&gt; tercih edilmelidir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yani controller, service, job, command, middleware veya model içinde doğrudan &lt;code&gt;env()&lt;/code&gt; kullanmak iyi bir pratik değildir.&lt;/p&gt;




&lt;h2&gt;
  
  
  Doğru akış
&lt;/h2&gt;

&lt;p&gt;Laravel’de ideal akış şudur:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.env -&amp;gt; config/*.php -&amp;gt; config()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Örneğin &lt;code&gt;.env&lt;/code&gt; dosyasında şöyle değerler olsun:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SMS_API_KEY=example-key
SMS_API_SECRET=example-secret
SMS_SENDER=MYAPP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu değerleri doğrudan uygulama kodunda okumak yerine config dosyasına taşımalıyı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;// config/services.php&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'sms'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'api_key'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s1"&gt;'api_secret'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_SECRET'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s1"&gt;'sender'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_SENDER'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'APP'&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;Sonra uygulama içinde şöyle kullanmalıyı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="nv"&gt;$apiKey&lt;/span&gt; &lt;span class="o"&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;'services.sms.api_key'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu küçük fark, özellikle production ortamında önem kazanır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Asıl sebep: config cache
&lt;/h2&gt;

&lt;p&gt;Production ortamında Laravel projelerinde genellikle şu komut çalıştırılır:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan config:cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu komut, tüm config dosyalarını tek bir cache dosyasında toplar. Böylece Laravel her request’te config dosyalarını tekrar tekrar okumaz.&lt;/p&gt;

&lt;p&gt;Ama bunun önemli bir sonucu vardır:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Config cache aktifken &lt;code&gt;.env&lt;/code&gt; dosyası doğrudan okunmayabilir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bu yüzden uygulama kodunda şu kullanım risklidir:&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="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Çünkü production’da beklediğin değeri alamayabilirsin.&lt;/p&gt;

&lt;p&gt;Ama şu kullanım güvenlidir:&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="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'services.sms.api_key'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Çünkü bu değer config cache içine zaten alınmıştır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Yanlış kullanım
&lt;/h2&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="k"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SmsService&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;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$phone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// SMS gönder...&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 localde çalışıp production’da sorun çıkarabilir. Çünkü localde genellikle config cache yoktur, production’da ise vardır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Doğru kullanım
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// config/services.php&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'sms'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'api_key'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s1"&gt;'api_secret'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_SECRET'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s1"&gt;'sender'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_SENDER'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'APP'&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;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="k"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SmsService&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;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$phone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$apiKey&lt;/span&gt; &lt;span class="o"&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;'services.sms.api_key'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$apiSecret&lt;/span&gt; &lt;span class="o"&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;'services.sms.api_secret'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$sender&lt;/span&gt; &lt;span class="o"&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;'services.sms.sender'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// SMS gönder...&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 servis artık &lt;code&gt;.env&lt;/code&gt; dosyasına doğrudan bağımlı değildir. Laravel’in config sistemi üzerinden çalışır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Büyük servislerde ayrı config dosyası daha iyi olabilir
&lt;/h2&gt;

&lt;p&gt;Eğer ayarlar büyüyorsa &lt;code&gt;config/services.php&lt;/code&gt; içine her şeyi koymak yerine ayrı bir dosya oluşturmak daha okunabilir olur.&lt;/p&gt;

&lt;p&gt;Örneğin:&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;// config/sms.php&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'provider'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_PROVIDER'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'netgsm'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="s1"&gt;'api_key'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="s1"&gt;'api_secret'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_API_SECRET'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="s1"&gt;'sender'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_SENDER'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'APP'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="s1"&gt;'timeout'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SMS_TIMEOUT'&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="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kullanı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="nv"&gt;$provider&lt;/span&gt; &lt;span class="o"&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;'sms.provider'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$timeout&lt;/span&gt; &lt;span class="o"&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;'sms.timeout'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu yapı özellikle SMS, ödeme, yapay zeka, takvim, WhatsApp veya dış servis entegrasyonlarında daha düzenli olur.&lt;/p&gt;




&lt;h2&gt;
  
  
  Test yazarken de config daha kullanışlıdır
&lt;/h2&gt;

&lt;p&gt;Doğrudan &lt;code&gt;env()&lt;/code&gt; kullanırsan testlerde değer değiştirmek zahmetli hale gelir.&lt;/p&gt;

&lt;p&gt;Ama config kullanıyorsan test içinde kolayca override edebilirsin:&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="nf"&gt;config&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;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sms.provider'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'fake'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Örneğin:&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;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;test_it_uses_fake_sms_provider&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;void&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="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sms.provider'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'fake'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// test...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu, testleri daha kontrollü ve temiz hale getirir.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bir adım ileri: typed config object
&lt;/h2&gt;

&lt;p&gt;Daha büyük projelerde config değerlerini sürekli string key ile çağırmak da dağınıklık oluşturabilir:&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="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sms.api_key'&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;'sms.api_secret'&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;'sms.sender'&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;'sms.timeout'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu durumda küçük bir config object kullanılabilir:&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;final&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;SmsConfig&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;string&lt;/span&gt; &lt;span class="nv"&gt;$apiKey&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;string&lt;/span&gt; &lt;span class="nv"&gt;$apiSecret&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;string&lt;/span&gt; &lt;span class="nv"&gt;$sender&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;$timeout&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;p&gt;Service provider içinde bağlanabilir:&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;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;singleton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;SmsConfig&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="k"&gt;function&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SmsConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;apiKey&lt;/span&gt;&lt;span class="o"&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;'sms.api_key'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;apiSecret&lt;/span&gt;&lt;span class="o"&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;'sms.api_secret'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="o"&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;'sms.sender'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&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;'sms.timeout'&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;Sonra servis içinde:&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;final&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;SmsService&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;private&lt;/span&gt; &lt;span class="kt"&gt;SmsConfig&lt;/span&gt; &lt;span class="nv"&gt;$config&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="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$phone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// $this-&amp;gt;config-&amp;gt;apiKey&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 Laravel’in zorunlu standardı değildir. Her config için object yazmak da gereksizdir. Ama kritik ve büyüyen entegrasyonlarda tip güvenliği, IDE desteği ve test edilebilirlik açısından temiz bir mimari tercih olabilir.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;env()&lt;/code&gt; config dosyalarında, &lt;code&gt;config()&lt;/code&gt; uygulama kodunda kullanılır.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bu basit alışkanlık, localde çalışan ama production’da sorun çıkaran birçok hatanın önüne geçer.&lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>backend</category>
    </item>
    <item>
      <title>PHP’de Global Function Resolution: strlen() mi, \strlen() mi?</title>
      <dc:creator>Barış Bideratan</dc:creator>
      <pubDate>Mon, 27 Apr 2026 10:53:55 +0000</pubDate>
      <link>https://forem.com/baris/phpde-global-function-resolution-strlen-mi-strlen-mi-4faj</link>
      <guid>https://forem.com/baris/phpde-global-function-resolution-strlen-mi-strlen-mi-4faj</guid>
      <description>&lt;p&gt;PHP’de bazen şöyle kodlar görürü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="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bazı projelerde ise aynı fonksiyon şöyle yazılı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="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;İlk bakışta gereksiz bir detay gibi görünebilir. Sonuçta ikisi de string uzunluğu hesaplıyor, değil mi?&lt;/p&gt;

&lt;p&gt;Evet, çoğu zaman sonuç aynı olur. Ama PHP’nin namespace içindeki fonksiyon çözümleme davranışını bilirsek, bu küçük farkın neden ortaya çıktığını daha iyi anlarız.&lt;/p&gt;

&lt;p&gt;Bu konu özellikle framework, package, library veya performans hassasiyeti olan kodlar yazarken önem kazanır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Kısa cevap
&lt;/h2&gt;

&lt;p&gt;PHP’de namespaced bir dosya içindeysen:&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="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP önce şu fonksiyonu arar:&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="nf"&gt;App\Services\strlen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eğer bulamazsa global namespace’e düşer ve şunu çalıştırı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="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ama şöyle yazarsan:&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="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP doğrudan global namespace’teki &lt;code&gt;strlen&lt;/code&gt; fonksiyonunu çağırır.&lt;/p&gt;

&lt;p&gt;Yani:&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="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ile&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="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;çoğu durumda aynı sonucu üretir, fakat çözümleme yolları farklıdır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Namespace içinde fonksiyon çağırmak
&lt;/h2&gt;

&lt;p&gt;Şu örneğe bakalı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="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Support&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$text&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="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$text&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;Buradaki &lt;code&gt;strlen()&lt;/code&gt; çağrısı global PHP fonksiyonu gibi görünür. Ama PHP bunu doğrudan global &lt;code&gt;strlen()&lt;/code&gt; olarak okumaz.&lt;/p&gt;

&lt;p&gt;Önce mevcut namespace içinde fonksiyon arar:&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="nf"&gt;App\Support\strlen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eğer böyle bir fonksiyon yoksa, PHP fallback yapar ve global fonksiyonu çağırı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="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu yüzden kod çalışır.&lt;/p&gt;




&lt;h2&gt;
  
  
  Peki &lt;code&gt;\strlen()&lt;/code&gt; ne yapar?
&lt;/h2&gt;

&lt;p&gt;Başına &lt;code&gt;\&lt;/code&gt; koyduğumuzda PHP’ye şunu söylemiş oluruz:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bu fonksiyonu mevcut namespace içinde arama. Direkt global namespace’ten çağır.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Örnek:&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\Support&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$text&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="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$text&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 PHP doğrudan global &lt;code&gt;strlen()&lt;/code&gt; fonksiyonuna gider.&lt;/p&gt;

&lt;p&gt;Yani namespace fallback mekanizmasına hiç girmez.&lt;/p&gt;




&lt;h2&gt;
  
  
  Farkı daha net görelim
&lt;/h2&gt;

&lt;p&gt;Şöyle bir kod 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="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Support&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$value&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="mi"&gt;999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Barış'&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;Çıktı:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;999
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Çünkü &lt;code&gt;strlen()&lt;/code&gt; çağrısı önce mevcut namespace içinde aranır ve &lt;code&gt;App\Support\strlen()&lt;/code&gt; bulunduğu için o çalışır.&lt;/p&gt;

&lt;p&gt;Ama şöyle yazarsak:&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="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Support&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$value&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="mi"&gt;999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Barış'&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;Çıktı:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Çünkü &lt;code&gt;\strlen()&lt;/code&gt; doğrudan global PHP fonksiyonunu çağırır.&lt;/p&gt;

&lt;p&gt;Buradaki &lt;code&gt;6&lt;/code&gt;, &lt;code&gt;"Barış"&lt;/code&gt; string’inin byte uzunluğudur. Türkçe karakterlerden dolayı karakter sayısı ile byte sayısı farklı olabilir. Karakter sayısı gerekiyorsa &lt;code&gt;mb_strlen()&lt;/code&gt; kullanmak daha doğru olur.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bu davranış sadece fonksiyonlarda mı var?
&lt;/h2&gt;

&lt;p&gt;PHP’de namespace çözümleme davranışı fonksiyonlar, sabitler ve class’lar için farklı çalışır.&lt;/p&gt;

&lt;p&gt;Fonksiyonlarda fallback vardı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="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'test'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP önce &lt;code&gt;App\strlen()&lt;/code&gt; arar, bulamazsa global &lt;code&gt;strlen()&lt;/code&gt; fonksiyonuna gider.&lt;/p&gt;

&lt;p&gt;Sabitlerde de benzer fallback davranışı vardı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="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="kc"&gt;PHP_VERSION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP önce &lt;code&gt;App\PHP_VERSION&lt;/code&gt; arayabilir, sonra global &lt;code&gt;PHP_VERSION&lt;/code&gt; sabitine düşebilir.&lt;/p&gt;

&lt;p&gt;Ama class’larda durum farklıdı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="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$date&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;DateTime&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 global &lt;code&gt;DateTime&lt;/code&gt; sınıfını otomatik bulmaz. PHP bunu şöyle yorumlar:&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;App\DateTime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu yüzden doğru kullanım şudur:&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;$date&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;\DateTime&lt;/span&gt;&lt;span class="p"&gt;();&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="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$date&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;DateTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu ayrım önemli. Fonksiyonlarda global fallback varken, class’larda aynı rahatlık yoktur.&lt;/p&gt;




&lt;h2&gt;
  
  
  Neden bazı projeler &lt;code&gt;\strlen()&lt;/code&gt; kullanır?
&lt;/h2&gt;

&lt;p&gt;Bunun birkaç sebebi var.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Açık niyet
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;şunu açıkça söyler:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ben PHP’nin global built-in fonksiyonunu çağırıyorum.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bu özellikle framework, SDK veya package geliştirirken güzel bir sinyaldir.&lt;/p&gt;

&lt;p&gt;Mesela:&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;Vendor\Package&lt;/span&gt;&lt;span class="p"&gt;;&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;StringHelper&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;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$value&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="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&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;\strlen()&lt;/code&gt; kullanmak, kodu okuyan kişiye “bu global PHP fonksiyonu” mesajını net verir.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Namespace içinde aynı isimli fonksiyonlardan etkilenmemek
&lt;/h3&gt;

&lt;p&gt;Bir namespace içinde aynı isimde fonksiyon tanımlanmış olabilir:&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\Support&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;time&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="mi"&gt;123456&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 durumda:&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="nb"&gt;time&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;çağrısı &lt;code&gt;App\Support\time()&lt;/code&gt; fonksiyonunu çalıştırır.&lt;/p&gt;

&lt;p&gt;Ama:&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="nf"&gt;\time&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;global PHP &lt;code&gt;time()&lt;/code&gt; fonksiyonunu çağırır.&lt;/p&gt;

&lt;p&gt;Bu, özellikle testlerde veya özel helper fonksiyonlarında fark yaratabilir.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Çok küçük performans farkı
&lt;/h3&gt;

&lt;p&gt;Geçmişte &lt;code&gt;\strlen()&lt;/code&gt; gibi fully-qualified global function çağrılarının daha doğrudan çözümlendiği için küçük performans avantajı sağlayabileceği konuşulurdu.&lt;/p&gt;

&lt;p&gt;Modern PHP sürümlerinde OPcache ve engine optimizasyonları sayesinde bu fark çoğu uygulamada pratik olarak önemsizdir.&lt;/p&gt;

&lt;p&gt;Yani normal bir Laravel projesinde:&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="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;yerine her yerde:&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="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;yazmak büyük bir performans mucizesi yaratmaz.&lt;/p&gt;

&lt;p&gt;Ama düşük seviyeli bir package, yüksek frekanslı bir parser, serializer, validator veya framework core kodu yazıyorsan &lt;code&gt;\strlen()&lt;/code&gt;, &lt;code&gt;\is_array()&lt;/code&gt;, &lt;code&gt;\count()&lt;/code&gt;, &lt;code&gt;\sprintf()&lt;/code&gt; gibi kullanımlar tercih edilebilir.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;use function&lt;/code&gt; alternatifi
&lt;/h2&gt;

&lt;p&gt;PHP’de fonksiyonları import etmek de mümkündü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="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Support&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;array_filter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;array&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$length&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;array_filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$items&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 kullanım da niyeti açık hale getirir.&lt;/p&gt;

&lt;p&gt;Daha okunabilir bir örnek:&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\Support&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;is_string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;;&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;UsernameValidator&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;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;mixed&lt;/span&gt; &lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;is_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&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 fonksiyonların global PHP fonksiyonları olduğu üstte açıkça belirtilmiş olur.&lt;/p&gt;

&lt;p&gt;Ama pratikte çoğu PHP/Laravel projesinde bu kadar detaylı import kullanılmaz. Daha çok package veya library seviyesinde karşımıza çıkar.&lt;/p&gt;




&lt;h2&gt;
  
  
  Laravel projelerinde ne yapmalı?
&lt;/h2&gt;

&lt;p&gt;Laravel tarafında günlük uygulama kodunda şu kullanım gayet normaldir:&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&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="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bunu illa şöyle yazmak zorunda değilsin:&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;\strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&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="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Benim pratik önerim şu olur:&lt;/p&gt;

&lt;p&gt;Basit application code içinde okunabilirliği bozmayacak şekilde normal kullanım yeterlidir:&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="nb"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$items&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;is_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ama reusable package, framework-level helper, performans hassas kod veya namespace çakışması ihtimali olan bir yerde fully-qualified kullanım daha temiz olabilir:&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="nf"&gt;\count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$items&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;\is_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;\trim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yani mesele “her zaman böyle yaz” değil; kodun bağlamına göre doğru seçimi yapmak.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testlerde bu davranış işe yarayabilir
&lt;/h2&gt;

&lt;p&gt;Namespace function resolution bazen testlerde bilinçli olarak kullanılabilir.&lt;/p&gt;

&lt;p&gt;Örneğin production kodunda şöyle bir kullanım var diyelim:&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="k"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TokenGenerator&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;generate&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="nb"&gt;bin2hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&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;random_bytes()&lt;/code&gt; unqualified çağrılmıştır.&lt;/p&gt;

&lt;p&gt;Test ortamında aynı namespace altında özel bir fonksiyon tanımlayarak bu davranışı kontrol etmek teorik olarak mümkündü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="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="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;random_bytes&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;$length&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="nb"&gt;str_repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$length&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 durumda &lt;code&gt;App\Services&lt;/code&gt; namespace’i içindeki &lt;code&gt;random_bytes()&lt;/code&gt; çağrısı önce bu fonksiyona bakabilir.&lt;/p&gt;

&lt;p&gt;Ama production kodunda şöyle yazılmış olsaydı:&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;return&lt;/span&gt; &lt;span class="nf"&gt;\bin2hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;\random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;artık namespace içindeki override devreye girmezdi. Çünkü çağrı doğrudan global fonksiyona giderdi.&lt;/p&gt;

&lt;p&gt;Bu teknik her projede önerilecek bir yöntem değildir, ama PHP’nin fonksiyon çözümleme mantığını anlamak açısından güzel bir örnektir.&lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>backend</category>
      <category>performance</category>
    </item>
    <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://forem.com/baris/laravelde-real-time-facades-nedir-nasil-calisir-1h84</link>
      <guid>https://forem.com/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://forem.com/baris/apk-dosyalarini-duzenleme-ve-yeniden-imzalama-adim-adim-kilavuz-4i4p</link>
      <guid>https://forem.com/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://forem.com/baris/phpde-early-return-kodunuzu-temizleyen-basit-bir-yaklasim-3cng</link>
      <guid>https://forem.com/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://forem.com/baris/laravelde-metotlar-arasi-takip-hangi-metottan-geldim-1gjc</link>
      <guid>https://forem.com/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://forem.com/baris/laravelde-env-dosyasinda-bir-degiskeni-digerine-referans-verme-1b76</link>
      <guid>https://forem.com/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://forem.com/baris/laravel-migration-metin-veri-tipleri-arasindaki-farklar-1a6j</link>
      <guid>https://forem.com/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://forem.com/baris/laravelde-carbon-kutuphanesini-yerellestirme-2fn3</link>
      <guid>https://forem.com/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://forem.com/baris/php-81-ile-gelen-enumlar-kodunuzu-daha-guvenli-ve-anlasilir-hale-getirin-3g44</link>
      <guid>https://forem.com/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>
  </channel>
</rss>
