Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

PHP "Undefined variable" Hatası Nasıl Çözülür?

php-undefined-variable-hatasi-nasil-cozulur
Bu yazıda neler var?
  1. Undefined variable hatasının temel nedeni nedir?
  2. Tanımlanmamış değişkeni, yazım hatasını ve harf farkını kontrol et
  3. Fonksiyonlarda yerel ve global değişken kapsamını doğru kur
  4. Koşullu atamalarda tüm kod yollarına başlangıç değeri ver
  5. Hata bastırmak yerine kök nedeni bulmak için teşhis akışını uygula
  6. Sık Sorulan Sorular

PHP "undefined variable" hatası, bir değişkenin değer atanmadan okunması veya kullanıldığı kapsamda bulunamaması durumunda ortaya çıkar. Çözüm için değişken adını, ilk atama noktasını ve kullanım noktasına ulaşan tüm kod yollarını kontrol etmelisin. Özellikle koşullu atamalarda, değişkene varsayılan bir başlangıç değeri vermek sorunu önlemeye yardımcı olur.

Pratik bir teşhis sırası kullanabilirsin: Önce değişken adını bul, sonra bu değişkene yapılan ilk atamayı bul ve son olarak kullanım satırına ulaşan her yolu izle. Böylece PHP undefined variable hatasının yazım, kapsam veya eksik atama kaynaklı olup olmadığını daha kolay ayırabilirsin.

Undefined variable hatasının temel nedeni nedir?

Bir değişkeni kullanmadan önce ona bir değer atanmış olmalıdır. Aşağıdaki örnekte $mesaj yalnızca koşul doğru olduğunda değer alır:

<?php
$puan = 70;

if ($puan >= 90) {
    $mesaj = "Başarılı";
}

echo $mesaj;
?>

$puan değeri 90'dan küçük olduğu için koşulun içindeki atama çalışmaz. Buna rağmen echo $mesaj; satırı değişkeni okumaya çalışır. Sorun, değişkenin kullanımından önce her durumda değer almamış olmasıdır.

Bu tür bir hatayı incelerken üç aşamalı bir çerçeve kullan:

  1. Tanımlı mı? Değişkene gerçekten bir değer atanmış mı? Atama satırı hiç çalışmıyor veya kodda hiç bulunmuyorsa değişken kullanıma hazır değildir.
  2. Doğru kapsamda mı? Değişken bir fonksiyon, döngü veya koşul bloğu içinde tanımlanmış olabilir. Kullanım noktası bu değişkene erişebilecek kapsamda mı, bunu kontrol et.
  3. Her kod yolunda değer alıyor mu? Bir koşul, erken dönüş veya istisna nedeniyle bazı yollar atama satırına ulaşmadan kullanım noktasına gidebilir. Tüm yolları ayrı ayrı izle.

Kısa tanı akışı şöyledir: Hata mesajındaki değişken adını kod içinde bul, bu ada yapılan ilk atamayı geriye doğru takip et ve kullanım satırına ulaşan her koşulu incele. Gerekirse kullanım öncesinde açık bir başlangıç değeri ata. Böylece yalnızca hata mesajını bastırmak yerine değişkenin neden boşta kaldığını ortaya çıkarabilirsin.

Tanımlanmamış değişkeni, yazım hatasını ve harf farkını kontrol et

Hiç atanmamış değişken

Değişken adı doğru yazılmış olsa bile kodda ona hiç değer verilmemiş olabilir. Örneğin echo $toplam; satırından önce $toplam için bir atama yoksa önce bu eksikliği düzeltmelisin.

Benzer fakat farklı yazılmış değişken adı

$kullaniciAdi ile $kullaniciadi aynı değişken değildir. İkinci adın A harfi küçük yazıldığı için PHP açısından ayrı bir isim oluşturur. Değişkeni tanımlarken kullandığın ad ile okuduğun ad karakter karakter aynı olmalıdır.

Büyük ve küçük harf farkı

Değişken adlarında büyük ve küçük harfleri karıştırmak, atama yapılmış bir değişkenin başka bir adla okunmasına yol açabilir. Kod boyunca tek bir adlandırma biçimi seç ve kullanım noktalarını bu biçime göre düzenle.

neden kontrol et düzelt yeniden çalıştır
Değişken hiç atanmamış İlk kullanımdan önce bu ada yapılan bir atama var mı? Değişkeni ilk kullanımından önce uygun bir değerle tanımla. Aynı senaryoyu yeniden çalıştır ve kullanım satırını tekrar kontrol et.
Benzer fakat farklı değişken adı $kullaniciAdi ile $kullaniciadi gibi adları karşılaştır. Değişkeni ilk kullanımından önce tek ve doğru adla tanımla; diğer yazımları düzenle. Düzenlenen dosyayı aynı girişlerle yeniden çalıştır.
Büyük ve küçük harf farkı Atama ve kullanım satırlarındaki harfleri tek tek incele. Değişkeni ilk kullanımından önce doğru büyük ve küçük harflerle tanımla. Aynı kod yolunu yeniden çalıştırıp hatanın tekrarlanıp tekrarlanmadığını kontrol et.

Fonksiyonlarda yerel ve global değişken kapsamını doğru kur

PHP'de fonksiyon dışında tanımlanan bir değişken, fonksiyon gövdesi içinde kendiliğinden kullanılamaz. Fonksiyonun parametreleri, dışarıdaki veriyi açıkça içeri aktarmanın okunabilir yoludur. Fonksiyon içinde oluşturulan yerel değişken de yalnızca o fonksiyon gövdesinde geçerlidir.

Aşağıdaki örnekte $isim dışarıda tanımlıdır; ancak selamla() fonksiyonu içinde doğrudan kullanılmaya çalışılır:

<?php
$isim = "Deniz";

function selamla() {
    echo "Merhaba, " . $isim;
}

selamla();
?>

Kontrol et: Hata satırında kullanılan $isim değişkeninin fonksiyon içine parametre olarak gelip gelmediğine bak. Bu örnekte fonksiyonun kendi kapsamında $isim tanımlı değildir.

Düzelt: Gereken değeri fonksiyon parametresiyle aktar:

<?php
$isim = "Deniz";

function selamla($kullaniciAdi) {
    echo "Merhaba, " . $kullaniciAdi;
}

selamla($isim);
?>

Yeniden çalıştır: Ekranda Merhaba, Deniz çıktısı görülmelidir. Bu yaklaşım, fonksiyonun hangi veriye ihtiyaç duyduğunu imzasında görünür kılar.

global anahtar sözcüğüyle dış kapsamdan değişkene erişmek de mümkündür; ancak bu kullanımda fonksiyonun bağlı olduğu veri dışarıdan daha az anlaşılır hâle gelebilir. Önce verinin parametreyle aktarılıp aktarılamayacağını değerlendirmek, kapsam kaynaklı php undefined variable hatası için teşhisi kolaylaştırır.

Koşullu atamalarda tüm kod yollarına başlangıç değeri ver

Bir değişken yalnızca bir if bloğu içinde atanıyorsa, koşul sağlanmadığında sonraki satırlarda tanımsız kalır. Teşhis için değişkenin kullanıldığı her noktadan geriye doğru ilerle: Atamanın hangi koşulda yapıldığını, koşul yanlış olduğunda ne olacağını ve alternatif bir başlangıç değerinin bulunup bulunmadığını kontrol et.

Formdan gelen kullanıcı adı için aşağıdaki örnek, her durumda $kullaniciAdi değişkenini tanımlar:

<?php
$kullaniciAdi = "Misafir";

if (isset($_POST["kullanici_adi"])) {
    $kullaniciAdi = $_POST["kullanici_adi"];
}

echo "Merhaba, " . $kullaniciAdi;
?>

Kontrol et: İlk satır, form verisi hiç gönderilmediğinde kullanılacak başlangıç değerini oluşturur. isset($_POST["kullanici_adi"]) ise ilgili alanın gönderilip gönderilmediğini denetler. Koşul doğruysa formdaki değer başlangıç değerinin üzerine yazılır.

Düzelt: Değişkeni yalnız if içinde oluşturmak yerine, koşuldan önce varsayılan değerle tanımla. Böylece koşul doğru da olsa yanlış da olsa echo satırı tanımlı bir değişkene erişir.

Yeniden çalıştır: Form alanı gönderilmemişse ekranda Merhaba, Misafir görülür. Alan gönderilmişse gönderilen metin kullanılır.

Boş metin ile gönderilmemiş alan aynı durum değildir. Kullanıcı alanı boş bırakıp formu gönderirse isset() doğru olur ve $kullaniciAdi boş metne atanır. Alan hiç gönderilmemişse koşul çalışmaz, başlangıç değeri olan Misafir korunur. Bu ayrımı ihtiyaca göre ayrıca doğrulamak, tüm kod yollarında değişkenin tanımlı kalmasını sağlar.

Hata bastırmak yerine kök nedeni bulmak için teşhis akışını uygula

PHP undefined variable hatasını hata bastırma yöntemleriyle gizlemek, değişkenin neden tanımsız kaldığını çözmez. Kod daha sonra düzenlendiğinde aynı sorun farklı bir satırda yeniden ortaya çıkabilir ve hata ayıklama zorlaşabilir. Bunun yerine değişken tanımını ve değişkene ulaşan tüm kod yollarını sistemli biçimde incelemek gerekir.

  1. Kullanım satırını belirle: Hata mesajındaki satırda hangi değişkenin kullanıldığını kontrol et.
  2. Değişken adını eşleştir: Kullanım satırındaki adın, atama yapılan yerdeki adla birebir aynı yazıldığından emin ol. Büyük ve küçük harf farklarını da kontrol et.
  3. İlk atamayı incele: Değişkene ilk değerin hangi satırda verildiğini bul. Bu atama, değişken kullanılmadan önce gerçekleşmelidir.
  4. Kapsamı doğrula: Değişken bir fonksiyon içinde kullanılıyorsa fonksiyon parametresi, yerel atama veya gerekli durumlarda global ile doğru kapsamda erişildiğini kontrol et.
  5. Koşullu yolları test et: if, switch, döngü ve form kontrollerinde değişkene değer verilmeyen bir yol olup olmadığını incele.
  6. Gerekiyorsa varsayılan değer ekle: Her yolun atama yapması mümkün değilse, kullanımdan önce amaca uygun bir başlangıç değeri tanımla.
  7. Aynı girdilerle yeniden çalıştır: Hatanın oluştuğu form verisini, URL parametresini veya koşulu yeniden kullanarak düzeltmeyi doğrula.

Bu akış, yalnızca görünen hatayı kapatmak yerine kodun hangi aşamada eksik kaldığını gösterir. Özellikle form verileri ve koşullu işlemlerde, bir değişkenin her durumda atanıp atanmadığını kontrol etmek bakım maliyetini azaltmaya yardımcı olur.

Kısa kontrol listesi

  • Değişken adı her kullanım ve atama noktasında aynı mı?
  • Değişken, kullanıldığı kapsamda tanımlı mı?
  • Fonksiyonun ihtiyaç duyduğu veri parametre olarak gönderilmiş mi?
  • Koşullu atamalarda tüm yollar değişkene değer veriyor mu?
  • Form girdisi gönderilmediğinde güvenli bir varsayılan değer var mı?
  • Düzeltme, aynı girdilerle yeniden test edildi mi?

Sık Sorulan Sorular

PHP'de bir değişkeni kullanmadan önce neden tanımlamak gerekir?

Değişken tanımlandığında PHP'nin kullanacağı değer açıkça belirlenir. Tanım yoksa kod, hangi verinin kullanılacağını bilemez ve undefined variable hatası oluşur. Başlangıç değeri vermek, özellikle koşullu işlemlerde tanımsız kullanım riskini azaltır.

Fonksiyon dışındaki bir değişkene fonksiyon içinde nasıl erişilir?

En anlaşılır yöntem, değeri fonksiyona parametre olarak göndermektir. Fonksiyon dışındaki değişkene global anahtar sözcüğüyle erişmek de mümkündür; ancak fonksiyonun hangi veriye bağlı olduğunu daha açık göstermek için parametre kullanımı çoğu durumda daha kolay izlenir.

Form alanı gönderilmediğinde PHP değişkenine varsayılan değer nasıl verilir?

isset() ile alanın gönderilip gönderilmediğini kontrol ederek varsayılan değer atayabilirsin.

$ad = isset($_POST['ad']) ? $_POST['ad'] : '';

Bu örnekte ad alanı gönderilmezse değişken boş metin olarak tanımlanır. Böylece sonraki kullanımda tanımsız değişken hatası oluşmaz.

Tanımsız değişken hatasını çözmenin temel yolu, değişkenin ilk atamasını, kapsamını ve ulaşılabilecek tüm kod yollarını birlikte kontrol etmektir.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara