PHP 8.x sürümlerinde daha sıkı tür davranışları, daha önce sessizce çalışan kodun çalışma zamanında hata vermesine yol açabilir. Yapay zekâ destekli incelemede yalnızca hata satırına bakmak yerine, değerin nereden geldiği, hangi türde beklendiği ve sınırda nasıl doğrulandığı birlikte değerlendirilmelidir.
Aşağıdaki küçük örnekte bir sipariş toplamı hesaplanıyor. Form verileri PHP’de varsayılan olarak string gelir; ancak fonksiyon parametresi ve aritmetik işlem sayısal değer bekler:
function calculateTotal(int $quantity, float $unitPrice): float
{
return $quantity * $unitPrice;
}
$quantity = $_POST['quantity'] ?? 1;
$unitPrice = $_POST['unit_price'] ?? 0;
echo calculateTotal($quantity, $unitPrice);
Kullanıcı
quantity=threeunit_priceAI İncelemesinde Kök Nedeni Ayırmak
Bir yapay zekâ aracı bu örnekte doğrudan “parametreleri string’e çevirin” önerisi verebilir. Bu öneri, hatayı bastırsa da geçersiz verinin sisteme girmesine izin verebilir. Daha güvenli yaklaşım, beklenen biçimi açıkça doğrulamak ve geçerli değeri kontrollü şekilde dönüştürmektir.
Örneğin:
function calculateTotal(int $quantity, float $unitPrice): float
{
return $quantity * $unitPrice;
}
$rawQuantity = $_POST['quantity'] ?? null;
$rawUnitPrice = $_POST['unit_price'] ?? null;
if (
!is_string($rawQuantity) ||
filter_var($rawQuantity, FILTER_VALIDATE_INT) === false
) {
throw new InvalidArgumentException('Miktar geçerli bir tam sayı olmalıdır.');
}
if (!is_string($rawUnitPrice) || !is_numeric($rawUnitPrice)) {
throw new InvalidArgumentException('Birim fiyat sayısal olmalıdır.');
}
$quantity = (int) $rawQuantity;
$unitPrice = (float) $rawUnitPrice;
if ($quantity < 1 || $unitPrice < 0) {
throw new InvalidArgumentException('Miktar ve fiyat aralığı geçersiz.');
}
echo calculateTotal($quantity, $unitPrice);
Burada yalnızca PHP’nin tür dönüşümüne güvenilmez. Girdinin string olup olmadığı, tam sayı veya sayısal değer biçimine uyup uymadığı ve iş kurallarındaki alt sınırlar ayrıca kontrol edilir. Para hesabı gerçek bir ödeme akışında kayan nokta yerine kuruş gibi tam sayı birimiyle yapılmalı veya uygun bir para kütüphanesi kullanılmalıdır.
AI Önerisinin Belirsizliği ve Yanlış Pozitifler
AI,
$_POST
function countSelected(array $selected): int
{
return count($selected);
}
$selected = $_POST['items'] ?? [];
$count = countSelected(is_array($selected) ? $selected : []);
Bir inceleme aracı burada “string bekleniyor” şeklinde yanlış bir uyarı üretebilir veya tüm girdilerin zorla string’e çevrilmesini önerebilir. Bu nedenle öneri, fonksiyonun sözleşmesi ve çağrıldığı bağlamla karşılaştırılmalıdır. AI çıktısı kesin kanıt değil, incelenmesi gereken bir hipotezdir.
İnceleme sırasında şu sorular sorulmalıdır:
- Değer kullanıcı girdisinden, JSON gövdesinden, veritabanından veya başka bir fonksiyondan mı geliyor?
- Fonksiyon parametresi gerçekten ,
int,floatveyastringolmalı mı?array - Boş string, sıfır, negatif sayı, ondalık sayı ve dizi gibi sınır durumlarında beklenen davranış nedir?
- PHP sürümü ve kullanımı hata davranışını değiştiriyor mu?
declare(strict_types=1) - Hata kullanıcıya güvenli bir doğrulama mesajı olarak mı dönmeli, yoksa sunucu tarafında loglanıp genel bir yanıt mı verilmelidir?
Düzeltme yalnızca normal bir örnekle test edilmemelidir. PHPUnit veya eşdeğer bir test düzeninde geçerli, geçersiz ve sınır değerler birlikte denenmelidir:
- ve
quantity=2için doğru toplamın üretildiğini kontrol edin.unit_price=19.90 - , boş miktar ve eksik alan için kontrollü hata bekleyin.
quantity=three - Sıfır ve negatif değerlerin iş kuralına uygun biçimde reddedildiğini test edin.
- gibi dizi girdilerinin TypeError yerine doğrulama hatası oluşturduğunu doğrulayın.
quantity[]=2 - Ondalık ayırıcı, çok büyük sayı ve başında veya sonunda boşluk bulunan girdileri ayrıca değerlendirin.
- PHP 8.x’in hedeflenen tüm sürümlerinde aynı testleri çalıştırın.
