PHP'de ??, ??=, ?: Operatörleri ve "Falsy" Değerler


PHP/Laravel ile geliştirdiğim projelerde her zaman daha temiz, daha okunabilir ve daha verimli kodlar yazmanın yollarını ararım. Siz de benim gibi mi düşünüyorsunuz? O zaman doğru yerdesiniz!
Bugün sizlerle PHP'nin belki de en kullanışlı operatörlerinden bazılarını ve "falsy" değerler kavramını paylaşmak istiyorum. Bu operatörler sayesinde kodlarınızı hem sadeleştirebilir hem de performansını artırabilirsiniz. Hazırsanız, hemen başlayalım!
(??
): Null Coalescing Operatörü
PHP'de ??
operatörü, değişkenin var olup olmadığını ve null
değeri taşıyıp taşımadığını kontrol etmek için mükemmel bir araçtır. Özellikle form verileri veya dizi anahtarlarıyla çalışırken, bu operatör sayesinde uzun if-else
bloklarına veda edebilirsiniz.
Örnek:
<?php
// Kullanıcı adı gönderilmemişse 'Misafir' olarak ata
$username = $_GET['username'] ?? 'Misafir';
echo $username;
?>
Bu kod parçasında, $_GET['username']
tanımlı değilse veya null
ise, $username
değişkenine 'Misafir'
değeri atanır. Kısa ve öz, değil mi?
(??=
): Null Coalescing Assignment Operatörü
??=
operatörü, bir değişkenin tanımlı olup olmadığını ve null
değer taşıyıp taşımadığını kontrol ederek, eğer öyleyse ona bir değer atar. Bu, varsayılan değer atamalarını daha da kolaylaştırır.
Örnek:
<?php
$config['timezone'] ??= 'Europe/Istanbul';
echo $config['timezone']; // Eğer daha önce atanmadıysa 'Europe/Istanbul' atanır
?>
Bu operatör, konfigürasyon dosyalarında varsayılan değerler belirlemek için harika bir yöntemdir.
(?:
) Ternary Operatörü ve Elvis Operatörü
PHP'deki ternary operatörü, basit koşul ifadeleri için ideal bir araçtır. Kısa ve anlaşılır yapısıyla, if-else
bloklarına alternatif sunar. Ayrıca, PHP'de "Elvis Operatörü" olarak da bilinir.
Örnek:
<?php
// Eğer yaş 18'den büyükse 'Yetişkin', değilse 'Çocuk' yazdır
$age = 20;
$type = ($age >= 18) ? 'Yetişkin' : 'Çocuk'; // (? :) Ternary Operatörü
// Gelen veride 'username' var mı kontrol et, yoksa 'Misafir' değerini ata
$username = $_GET['username'] ?: 'Misafir'; // (?:) Elvis Operatörü
?>
Hem okunabilir hem de kısa bir çözüm için oldukça kullanışlıdır!
??
ve ?:
Operatörlerinin Arasındaki İnce Farklar
Belki de en çok merak edilen soru: ??
ile ?:
operatörleri arasındaki farklar nelerdir? Gelin, bu iki operatörü detaylıca karşılaştıralım.
Özellik | ?? Operatörü | ?: Operatörü |
Kontrol Edilen Durum | Sadece null | Herhangi bir "falsy" değer (false , 0 , '' , vs.) |
Kullanım Alanı | Varsayılan değer atamaları, null kontrolleri | Genel koşul kontrolleri, "falsy" değerlerin ele alınması |
Kısa Yazım | $a = $b ?? 'varsayılan'; | $a = $b ?: 'varsayılan'; |
Zincirleme Kullanım | Evet | Evet |
Ne Zaman Hangisini Kullanmalıyız?
??
Operatörü: Değişkenin tanımlı olup olmadığını venull
olup olmadığını kontrol etmek istediğiniz durumlarda kullanın. Özellikle form verilerinde veya dizi anahtarlarında varsayılan değerler belirlemek için idealdir.?:
Operatörü: Değişkenin "falsy" değerlerini de dikkate almak istediğiniz genel koşul kontrolleri için tercih edin. Kullanıcı girdisinin boş olup olmadığını kontrol etmek gibi durumlarda mükemmel bir seçimdir.
“Falsy” Değerler Nedir?
Programlamada "falsy" değerler, boolean bağlamlarda false
olarak değerlendirilen değerlerdir. PHP'de bu değerler şunlardır:
false
0
(integer)0.0
(float)""
(boş string)"0"
(string)[]
(boş dizi)NULL
NOT: " "
(boşluk içeren string) PHP'de "falsy" olarak kabul edilmez; bu nedenle, boşluklu stringler "truthy" kabul edilir.
Neden Önemli?
"Falsy" değerler, koşul ifadelerinde doğrudan değişken kullanarak kodunuzu sadeleştirmenize yardımcı olur. Gereksiz karşılaştırmalardan kaçınarak daha temiz ve okunabilir kod yazabilirsiniz.
Örnek:
<?php
$username = null;
if ($username) {
echo "Kullanıcı adı mevcut.";
} else {
echo "Kullanıcı adı yok.";
}
// Çıktı: Kullanıcı adı yok.
?>
Pratik Örneklerle Öğrenelim
1. Kullanıcı Girişi Kontrolü
<?php
// Kullanıcı adı formdan gelmiş olsun
$username = $_POST['username'] ?? 'Misafir';
// Kullanıcı adını kontrol et
$status = $username ? 'Giriş Yaptı' : 'Giriş Yapmadı';
echo "Kullanıcı Adı: " . $username . " - Durum: " . $status;
?>
Bu örnekte, eğer kullanıcı adı gönderilmemişse 'Misafir'
atanır ve duruma göre mesaj görüntülenir.
2. Ayar Dosyasındaki Varsayılan Değer Ataması
<?php
$config = [];
// 'timezone' tanımlı değilse 'Europe/Istanbul' olarak ayarla
$config['timezone'] ??= 'Europe/Istanbul';
// 'debug' tanımlı değilse false olarak ayarla
$config['debug'] ??= false;
echo "Timezone: " . $config['timezone'] . ", Debug: " . ($config['debug'] ? 'Açık' : 'Kapalı');
?>
Bu kod parçasında, konfigürasyon ayarları için varsayılan değerler belirlenir.
3. Arama Fonksiyonunda "Falsy" Değer Kullanımı
<?php
// Arama terimi gelmiş olsun
$searchTerm = $_GET['search'] ?? 'Tüm Kayıtlar';
// Arama terimini kontrol et
$searchQuery = $searchTerm ?: 'Tüm Kayıtlar';
echo "Arama Yapılan Terim: " . $searchQuery;
?>
Burada, eğer arama terimi boş veya "falsy" bir değer taşıyorsa, varsayılan olarak 'Tüm Kayıtlar'
atanır.
Daha Akıllı ve Verimli PHP Kodları Yazmak Sizin Elinizde
PHP'deki ??
, ??=
ve ?:
operatörlerini etkin bir şekilde kullanmak, kodlarınızı daha okunabilir, kısa ve verimli hale getirir. Ayrıca, "falsy" değerler kavramını anlamak, koşul ifadelerinizde daha akıllı ve esnek kontroller yapmanıza olanak tanır.
Öneriler:
Doğru Operatörü Seçin:
??
operatörünü yalnızcanull
kontrolleri için,?:
operatörünü ise genel koşul kontrolleri için kullanın.Kod Okunabilirliğine Önem Verin: Operatörleri kullanırken kodunuzun anlaşılır ve sürdürülebilir olmasına dikkat edin.
Test Etmeyi Unutmayın: Kullanacağınız operatörlerin beklenen davranışı sergilediğinden emin olmak için kodunuzu test edin.
Bu operatörleri projelerinizde kullanarak kod kalitenizi artırabilir ve daha profesyonel PHP çözümleri geliştirebilirsiniz. Siz de bu operatörleri deneyin ve farkı kendiniz görün!
Yazımı beğendiyseniz paylaşmayı ve düşüncelerinizi yorumlarda belirtmeyi unutmayın!
Bunun gibi daha fazla paylaşım için takipte kalın:
Daily.dev'den takip et: https://dly.to/tvhSbvvUB92
LinkedIn'den takip et: https://lnkd.in/dCSADZMB
Portföy: https://erhanurgun.tr
Blog: https://erho.dev
Tüm Bağlantılar: https://erho.me
Subscribe to my newsletter
Read articles from Erhan ÜRGÜN directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Erhan ÜRGÜN
Erhan ÜRGÜN
Laravel | AdonisJS | Back-End Developer