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

Erhan ÜRGÜNErhan ÜRGÜN
4 min read

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 DurumSadece nullHerhangi bir "falsy" değer (false, 0, '', vs.)
Kullanım AlanıVarsayılan değer atamaları, null kontrolleriGenel koşul kontrolleri, "falsy" değerlerin ele alınması
Kısa Yazım$a = $b ?? 'varsayılan';$a = $b ?: 'varsayılan';
Zincirleme KullanımEvetEvet

Ne Zaman Hangisini Kullanmalıyız?

  • ?? Operatörü: Değişkenin tanımlı olup olmadığını ve null 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:

  1. false

  2. 0 (integer)

  3. 0.0 (float)

  4. "" (boş string)

  5. "0" (string)

  6. [] (boş dizi)

  7. 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ızca null 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:

0
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