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

PHP Fonksiyonlarında "Too few arguments to function" Hatası Nasıl Çözülür?

php-too-few-arguments-to-function-hatasi
Bu yazıda neler var?
  1. "Too few arguments to function" Hatası Neden Oluşur?
  2. Tanım, Çağrı ve Veri Kaynağıyla Üç Aşamalı Teşhis
  3. Zorunlu ve Varsayılan Parametreleri Ayırt Et
  4. Form Verisini Kontrol Edip Fonksiyona Aktar
  5. Hatalı ve Düzeltilmiş Çağrı: Çalışan PHP Örneği
  6. Hangi Satırı Değiştirmelisin? Yanlış Fonksiyon Adını Ayır
  7. Sık Sorulan Sorular

PHP "Too few arguments to function" hatası, bir fonksiyon çağrılırken tanımda zorunlu olarak beklenen parametrelerden biri için argüman gönderilmediğinde oluşur. Çözüm, eksik argümanı çağrıya eklemek veya bu değer gerçekten isteğe bağlıysa parametreye varsayılan bir değer vermektir.

Sorunu bulmak için hata mesajında gösterilen satırdan başla. Ardından fonksiyon tanımını, çağrıda gönderilen argümanları ve bu argümanların geldiği veri kaynağını sırayla karşılaştır.

"Too few arguments to function" Hatası Neden Oluşur?

Fonksiyon tanımı, hangi girdilerin beklendiğini belirler. Tanımda parantez içine yazılan adlar parametre, fonksiyon çağrısında bu parametrelere karşılık gönderilen gerçek değerler ise argüman olarak adlandırılır. Zorunlu bir parametrenin çağrıda karşılığı yoksa fonksiyon beklediği girdiyi alamaz.

<?php
function topla(int $ilk, int $ikinci): int {
    return $ilk + $ikinci;
}

echo topla(3, 5);
// Beklenen çıktı: 8

Bu örnekte $ilk ve $ikinci parametre, 3 ve 5 ise argümandır. topla(3) çağrısında ikinci zorunlu parametre için argüman verilmez. return ifadesi fonksiyonun ürettiği değeri çağırana döndürür, ancak eksik argümanı tamamlamaz.

Bir değerin gönderilmemesi geçerli bir durumsa parametreye varsayılan değer tanımlanabilir. Örneğin ikinci parametre için 0 varsayılanı belirlenirse, çağrıda bu argümanın yazılmaması belirlenen varsayılan değerin kullanılmasına izin verir. Hata mesajındaki satırı inceleyerek önce hangi fonksiyonun çağrıldığını ve parantez içinde kaç argüman bulunduğunu kontrol et.

Tanım, Çağrı ve Veri Kaynağıyla Üç Aşamalı Teşhis

Tanım, Çağrı ve Veri Kaynağıyla Üç Aşamalı Teşhis

Hata satırını bulduktan sonra teşhisi üç aşamada yap. Önce fonksiyonun ne beklediğini, sonra çağrının ne gönderdiğini, son olarak gönderilecek verinin gerçekten hazırlanıp hazırlanmadığını kontrol et.

Kontrol noktası Sorulacak soru Düzeltme yeri
Tanım Parametre adları nedir? Toplam ve zorunlu parametre sayısı kaçtır? Varsayılan değeri olan parametre var mı? Fonksiyon tanımı veya parametrelerin varsayılan değerleri.
Çağrı Doğru fonksiyon adı mı kullanılıyor? Kaç argüman gönderildi? Argümanların sırası tanımla uyumlu mu? Fonksiyon çağrısı, argüman sayısı veya sırası.
Veri kaynağı Form alanının anahtarı doğru mu? Alan hiç gelmedi mi, boş mu, yoksa doğrulama başarısız mı? Form verisini hazırlayan kod ve çağrıdan önceki doğrulama.
Fonksiyon tanımındaki zorunlu parametre sayısı ile çağrıdaki argümanları karşılaştır.

Bir form alanının hiç gönderilmemesi, boş metin veya null olarak gönderilmesiyle aynı durum değildir. Boş bir değer çağrıya açıkça aktarılmış olabilir, ancak fonksiyonun beklediği kurallara göre yine de geçersiz sayılabilir. Çağrı aşamasında fonksiyon adını da kontrol et; ad yanlışsa önce çağrının doğru fonksiyona yöneldiğini doğrula. Kısa kontrol sırası şudur: hata satırını bul, tanımı oku, çağrıyı karşılaştır ve veri kaynağını doğrula.

Zorunlu ve Varsayılan Parametreleri Ayırt Et

“Too few arguments to function” hatası, fonksiyon çağrısında varsayılan değeri olmayan zorunlu parametrelerden biri için argüman gönderilmediğinde oluşur. Çözüm için önce fonksiyon tanımındaki parametreleri, sonra çağrıda gönderilen argümanları karşılaştırmalısın.

Fonksiyon tanımında yazılan $ad ve $puan ifadeleri parametredir. Fonksiyon çağrısında verdiğin 'Ece' ve 90 değerleri ise argümandır. Varsayılan değeri olmayan parametre için çağrıda mutlaka karşılık gelen bir argüman bulunmalıdır. Varsayılan değer verilen parametre ise yokluğun geçerli olduğu durumlarda atlanabilir.

Çağrılar sıralıdır. Örneğin kaydet('Ece', 90) çağrısında ilk argüman ilk parametreye, ikinci argüman ikinci parametreye aktarılır. Bir parametreye varsayılan değer eklemek yalnızca verinin gerçekten isteğe bağlı olduğu durumlarda uygundur. Eksik veya hatalı veriyi gizlemek için varsayılan değer kullanmak, sorunun fark edilmesini zorlaştırabilir.

Aşağıdaki örnekte boş bir metin göndermek ile hiç argüman göndermemek farklı sonuç verir:

<?php
function selamla(string $isim = 'Ziyaretçi'): string
{
    return 'Merhaba, ' . $isim;
}

echo '[' . selamla('') . ']' . PHP_EOL;
echo '[' . selamla() . ']' . PHP_EOL;

Beklenen çıktı:

[Merhaba, ]
[Merhaba, Ziyaretçi]

selamla('') çağrısında argüman vardır, fakat değeri boştur. selamla() çağrısında ise argüman hiç gönderilmediği için varsayılan değer kullanılır.

Form Verisini Kontrol Edip Fonksiyona Aktar

Form Verisini Kontrol Edip Fonksiyona Aktar

Formdan gelen veriyi doğrudan hesaplama yapan fonksiyona aktarmak yerine önce veri kaynağını kontrol et. Alanın var olup olmadığını, boş bırakılıp bırakılmadığını, beklenen türde bulunup bulunmadığını ve gerekiyorsa kabul edilen aralıkta olup olmadığını incele.

<?php
function puanMesaji(string $ad, int $puan): string
{
    return $ad . ': ' . $puan;
}

if (
    !array_key_exists('ad', $_POST) ||
    !array_key_exists('puan', $_POST) ||
    !is_string($_POST['ad']) ||
    !is_string($_POST['puan'])
) {
    $hata = 'Form verisi eksik veya beklenen türde değil.';
} else {
    $ad = trim($_POST['ad']);
    $puan = filter_var($_POST['puan'], FILTER_VALIDATE_INT);

    if ($ad === '' || $puan === false || $puan < 0 || $puan > 100) {
        $hata = 'Form verisi geçersiz.';
    } else {
        $sonuc = puanMesaji($ad, $puan);
    }
}

Bu akışta form verisi önce normalize edilir, ardından geçerli değerler puanMesaji($ad, $puan) çağrısına aktarılır. ad anahtarı mevcut olup değeri boş bir metinse alan gönderilmiş, fakat boş bırakılmıştır. Anahtarın hiç bulunmaması ise alanın gönderilmediği ayrı bir durumdur.

Alan hiç gelmemiş veya geçersizse veri hazırlama aşamasını düzeltmelisin. Alanlar geçerli olduğu hâlde çağrıda yalnızca puanMesaji($ad) yazılmışsa eksik olan argüman çağrıya eklenmelidir.

Hatalı ve Düzeltilmiş Çağrı: Çalışan PHP Örneği

İki zorunlu parametre alan bir fonksiyonu tek argümanla çağırırsan hata, fonksiyonun gövdesinden değil çağrıdan kaynaklanır. Aşağıdaki örnekte hesapla fonksiyonu iki sayıyı çarpmak için iki değer bekler:

<?php
function hesapla($sayi1, $sayi2) {
    return $sayi1 * $sayi2;
}

// Hatalı çağrı: hesapla(6);
// Düzeltilmiş çağrı:
echo hesapla(6, 7);
?>

Düzeltilmiş kodun beklenen çıktısı 42 olur.

hesapla(6) çağrısında $sayi1 için değer vardır, fakat $sayi2 için argüman gönderilmez. Fonksiyon tanımı doğru olsa da çağrı, zorunlu ikinci değeri sağlamadığı için tamamlanamaz. echo hesapla(6, 7); satırında iki argüman da doğru sırayla gönderilir.

İkinci değer her çağrıda gerekli değilse tanımda varsayılan değer kullanılabilir: function hesapla($sayi1, $sayi2 = 1). Ancak formdan gelmesi gereken bir değeri varsayılanla gizlemek yerine, önce verinin gelip gelmediğini ve geçerli olup olmadığını kontrol etmek gerekir.

Hangi Satırı Değiştirmelisin? Yanlış Fonksiyon Adını Ayır

Hata mesajındaki dosya ve satır bilgisi, incelemeye başlayacağın yeri gösterir. Önce o satırda yapılan fonksiyon çağrısını bul, ardından çağrılan adın fonksiyon tanımındaki adla aynı olup olmadığını kontrol et. Teşhis için tanımı, çağrıyı ve veri kaynağını sırayla incele.

Tanım: Fonksiyon başlığında varsayılan değeri bulunmayan parametreleri say. Bunlar zorunludur. Varsayılan değerli parametreler çağrıda gönderilmeyebilir, fakat bu davranışın iş mantığına uygun olması gerekir.

Çağrı: Çağrıda kaç argüman bulunduğunu ve bunların sırasını kontrol et. Tanımda iki zorunlu parametre varken çağrıda yalnızca biri varsa çağrı satırı düzeltilir. Argüman sayısı yeterli görünse bile değerler yanlış sıradaysa fonksiyon beklenmeyen sonuç üretebilir.

Veri kaynağı: Argümanlar bir formdan veya başka bir girdiden geliyorsa alan adlarını, verinin hazırlanma biçimini ve doğrulama adımını incele. Eksik ya da geçersiz veri, fonksiyon çağrısından önce ele alınmalıdır. Bu durumda değiştirilecek yer fonksiyon tanımı değil, veriyi hazırlayan ve doğrulayan koddur.

Fonksiyon adı tanımla eşleşmiyorsa sorun argüman sayısı değildir. Kod, çağrılan isimde erişilebilir bir fonksiyon bulamıyordur. Bu durum, aynı adlı fonksiyonun bulunması fakat zorunlu argümanlardan birinin eksik olması durumundan ayrıdır. Bu ayrımı yapmak için hata satırındaki adı doğrudan tanımla karşılaştır.

  1. Hata satırını ve çağrılan fonksiyon adını oku.
  2. Fonksiyon tanımını bul.
  3. Zorunlu parametreleri say.
  4. Çağrıdaki argümanların sayısını ve sırasını kontrol et.
  5. Veri kaynağını incele.
  6. Uygun düzeltme noktasını seç.
  7. Bilinen bir girişle yeniden dene.

Sık Sorulan Sorular

“Too few arguments to function” hatasında önce hangi satırı kontrol etmelisin?

Önce hata mesajında gösterilen dosya ve satırdaki fonksiyon çağrısını kontrol etmelisin. Çağrılan fonksiyonun adını tanımla karşılaştır, ardından zorunlu parametre sayısıyla gönderilen argüman sayısını ve sırasını incele.

Boş bir değer göndermek ile argümanı hiç göndermemek aynı mıdır?

Hayır. hesapla(6, '') çağrısında iki argüman gönderilmiş olur, ancak ikinci değer boş olduğu için veri doğrulaması gerekir. hesapla(6) çağrısında ise ikinci argüman hiç gönderilmez. Bu nedenle biri geçersiz veya uygun olmayan veri sorunu, diğeri eksik argüman sorunu olabilir.

Zorunlu parametreye varsayılan değer vermek ne zaman uygundur?

Parametrenin gerçekten isteğe bağlı olduğu ve kullanılmadığında anlamlı, güvenli bir varsayılan değerin bulunduğu durumlarda uygundur. Her çağrıda formdan alınması gereken bir değer için varsayılan eklemek, eksik veya hatalı girdiyi fark etmeyi zorlaştırabilir.

Yanlış fonksiyon adı hatası, eksik argüman hatasından nasıl ayrılır?

Fonksiyon adı yanlışsa çağrıdaki isim, erişilebilir tanımla eşleşmez ve sorun fonksiyonun bulunması aşamasındadır. İsim doğruysa fakat zorunlu parametrelerden biri eksikse fonksiyon bulunmuş, çağrı eksik yapılmış demektir. Bu yüzden önce adı, sonra parametre ve argüman sayısını karşılaştır.

Tanımı, çağrıyı ve veri kaynağını bu sırayla kontrol etmek, hatanın hangi satırda düzeltilmesi gerektiğini daha net gösterir.

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