PHP kullanırken tüm istisnalar kabul edilir sağlanması

4 Cevap php

Java istisnalar kullanılan ettik ve yol gibi bunu yakalamak ya da atmak olabilir istisnalar atmak sürece bir yöntemi çağırmak izin vermez.

PHP benzer bir şey arıyorum. Ben PHP Java daha dinamik, ve hatta bunu atar istisnaları tanımlamak izin vermez farkında, ama ben alabilirim yakın nedir?

Biz PHP Doc kullanarak bizim yöntemleri belge, bu yüzden doğru try / catch bloğu olmadan bir yöntem denilen, ya da doğru @ thows yorumsuz bir istisna attı eğer bir E_WARNING tetikleyen şey, mükemmel olurdu.

4 Cevap

PHP'nin kendisi bunu yapmak için hiçbir yolu yok. PHP ayrıştırmak ve kendinizi anlamaya gerekir. Bunun için phc plugin yazmayı deneyin.

Dil çekirdekli çalışmak için olursa olsun sadece bir şey sağlar çünkü, makul de hepsi çok yakın alabilirsiniz sanmıyorum. En iyi, sen performansı üzerinde kesinlikle korkunç etkisi olurdu tamamen kullanıcı uzay funcall / istisna doğrulama mekanizması çeşit oluşturarak rüzgar olur.

Ben size belirtilen amacı gerçekleştirmek emin değilim. PHP ortam genellikle (sanırım), diğer diller için bir derleme-zamanlı operasyon olacağını, bir işlev veya yapmak olmayabilir ne olabileceğini analiz etmez. Ben bile Yansıma yoluyla bu tür bir şey bulabilirsiniz sanmıyorum.

Eğer durum temel sınıf fully extendable olduğu gibi, attırmayı istisnaları tanımlamak değil söylüyorlar ancak zaman yanlıştır. PHP hataları tetikler, ama varsayılan olarak herhangi bir istisna atmak değil. Tetiklenen hataları ve İstisnalar, ikincisi çoğunlukla bir kullanıcı arazi yapısı olmak arasında temel bir fark vardır.

Bu bir soru değil, ama tam durum odaklı ortama taşımak istedim, set_error_handler() kullanarak kendi hata işleyicisi yazmak ve PHP hataları tetikleyen yönetmek verebilecek bir öneri ortaya koymak istiyorum , ve bir özel durum dışarı atmak var.

Ben sadece istisna işleyici ve yansıma kullanarak PHP bu davranışı yeniden düşünüyorum.

class YourException extends Exception {
  public function __toString() {
    return __CLASS__;
  }
}

class MyObject {
    public function __construct(){}
    /**
    * @throws MyException
    */
    public function myMethod() {
        return 'foo';
    }
}

try {
    $o = new MyObject();
    $o->myMethod();
} 
catch(YourException $e) {
    $method = new ReflectionMethod('MyObject', 'myMethod');
    $method->getDocComment();

    $throws = // Get the @throws comment (foreach, regexp, whatever);
    if($e === $throws) {
        // do something
    }
}

Setting your own exception handler.

Grab and analyse the comments with Reflection mechanism (see getDocComment)