SORU
18 Mart 2010, PERŞEMBE


Nasıl bir "catchable fatal error" PHP kaçırmayın tür ima edebilir miyim?

Yazın benim sınıf bir PHP5 İma kullanmaya çalışıyorum

class ClassA {
    public function method_a (ClassB $b)
    {}
}

class ClassB {}
class ClassWrong{}

Doğru kullanım:

$a = new ClassA;
$a->method_a(new ClassB);

hata üretir:

$a = new ClassA;
$a->method_a(new ClassWrong);

Catchable fatal error: Argüman 1 ClassA geçirilen::method_a() ClassB örneği olmalı, ClassWrong örneği verilen...

Eğer bir hata yakalamak için mümkünse öğrenebilir miyim ("") catchable beri? ve evet ise, nasıl?

Teşekkür ederim.

CEVAP
18 Mart 2010, PERŞEMBE


http://docs.php.net/errorfunc.constants diyor ki:

E_RECOVERABLE_ERROR ( integer )< / ^ br . Ölümcül hata Catchable. Muhtemelen tehlikeli bir hata oluştu, ancak dengesiz bir durumda Motoru terk etmediğini gösterir. Eğer hata bir kullanıcı tanımlı kolu (set_error_handler()) tarafından yakalanan değilse, uygulama bir E_ERROR olduğu gibi iptal eder.

Ayrıca bakınız: http://derickrethans.nl/erecoverableerror.html

örneğin

function myErrorHandler($errno, $errstr, $errfile, $errline) {
  if ( E_RECOVERABLE_ERROR===$errno ) {
    echo "'catched' catchable fatal error\n";
    return true;
  }
  return false;
}
set_error_handler('myErrorHandler');

class ClassA {
  public function method_a (ClassB $b) {}
}

class ClassWrong{}

$a = new ClassA;
$a->method_a(new ClassWrong);
echo 'done.';

yazdırır

'catched' catchable fatal error
done.

edit: Ama" ile işleyebilir bir istisna try-catch block . "yapabilirsiniz

function myErrorHandler($errno, $errstr, $errfile, $errline) {
  if ( E_RECOVERABLE_ERROR===$errno ) {
    echo "'catched' catchable fatal error\n";
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
    // return true;
  }
  return false;
}
set_error_handler('myErrorHandler');

class ClassA {
  public function method_a (ClassB $b) {}
}

class ClassWrong{}

try{
  $a = new ClassA;
  $a->method_a(new ClassWrong);
}
catch(Exception $ex) {
  echo "catched\n";
}
echo 'done.';

bakın: http://docs.php.net/ErrorException

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jpmkm1

    jpmkm1

    4 NİSAN 2008
  • Neil Cicierega

    Neil Ciciere

    22 Mart 2006
  • Samvith V Rao

    Samvith V Ra

    20 EKİM 2006