Neden bir "yakalanmamış istisna" alabilirim

2 Cevap php

Ben şu PHP kodu:

foreach (...) {
  try {
    $Object = MyDataMapper::getById(123);

    if (!$Object->propertyIsTrue()) {
      continue;
    }
  }
  catch (Exception $e) {
    continue;
  }
}

Bir veritabanı kaydı bulunamadı değilse MyDataMapper :: GetById () bir özel durum atar. İşte bu yöntemin tanımı:

public static function getById($id) {
  $query = "SELECT * FROM table WHERE id = $id";

  $Connection = Database::getInstance();
  $Statement = $Connection->prepare($query);
  $Statement->execute();

  if ($Statement->rowCount() == 0) {
    throw new Exception("Record does not exist!");
    return null;
  }

  $row = $Statement->fetch();

  return self::create($row);
}

Bu kodu yok bir veritabanı kaydı kimliği için çağrıldığında, ben bir ölümcül yakalanmamış istisna 'İstisna' hatası alıyorum.

Neden bu? Açıkçası ben yanlış ne yapıyorum ... istisna yakalıyorum?

Ben bir istisna atılan eminim. Belki devam ile - Ben istisna işleme am nasıl yanlış bir şey var mı?

EDIT

Sarsıntıdan gelen yardım sayesinde, aşağıdaki geçici çözüm bu sorunu çözer:

if (!$Object->propertyIsTrue()) {
 // Workaround to eAccelerator bug 291 (http://eaccelerator.net/ticket/291).
 $foo = 555;
 continue;
}

2 Cevap

PHP sürümü? -> 5.2.9

Eğer eaccelerator (sürüm) kullanıyor musunuz? -> 0.9.5.3 with ionCube PHP Loader v3.1.34

Eğer istisna Ne tür atmak mı? -> normal Exception


Try-catch blok ötede optimize ediliyor konuda belirli bir PHP + eAccelerator sürümlerinde bilinen sorunlar vardır.

: EAccelerator bug-tracker edin

Bir başlangıç ​​için bilet kontrol

291 Incorrect handling of exception

314 Exceptions not catched

317 Exception not caught

ve eaccelerator devre dışı bırakmayı deneyin.

Ben statik bir yöntem diyorsun çünkü olabilir düşünüyorum, ama yanlış olabilir. Eğer MyDataMapper başlatmasını ve nesnenin kendisi yöntemini çağırarak bunu test etmek mümkün mü?