SORU
15 AĞUSTOS 2011, PAZARTESİ


PHP Hata işleme: () ölmek Vs trigger_error() Vs atmak Hariç

PHP-Hata işleme için 3styles var bildiğim kadarıyla saygılar

  1. die()exit() tarzı:

    $con = mysql_connect("localhost","root","password");
    
    if (!$con) {
     die('Could not connect: ' . mysql_error());
    }
    
  2. throw Exception tarzı:

     if (!function_exists('curl_init')) {
    
          throw new Exception('need the CURL PHP extension. 
                               Recomplie PHP with curl');
        }
    
  3. trigger_error() tarzı:

    if(!is_array($config) && isset($config)) {
            trigger_error('Error: config is not an array or is not set', E_USER_ERROR);
        }
    

Şimdi, php manuel üç kullanılır.

  • Bilmek istediğim hangi stili ve neden tercih etmeliyim?

  • Bu 3 birbirinden değiştirmeleri düşmesi ve bu nedenle birbirinin yerine kullanılabilir.

Biraz OT: bana ya herkes hata işleme seçenekleri sadece PHP düşünüyor sadeceçok fazlaölçüde php geliştiricilerin kafasını karıştırıyor.

CEVAP
15 AĞUSTOS 2011, PAZARTESİ


Birincisi asla son kullanıcılar (kullanıcı hakkında bir şey yapamaz . alakasız bir gezegene bilgiler olduğu üretim kodu kullanılmalıdır ^em>"Veritabanına bağlanamıyor").

Eğer bazı kod kritik bir noktada olduğunu biliyorum eğer özel Durumlar, uygulama atmakbaşarısız olabilirve kodunuz birden fazla çağrı seviyeleri kurtarmak istediğiniz.

trigger_error() sağlar ince taneli hata raporlama (kullanarak farklı düzeylerde hata iletileri) ve gizlemek bu hataları son kullanıcılar (kullanarak set_error_handler()) ama hala onları görüntülenmesi için test sırasında.

Ayrıca trigger_error() önemli olmayan mesajları üretim kodu özel hata işleyicisi kullanarak bastırılmış gelişiminde önemli rol oynar üretebilir. Ölümcül hataları da üretebilir (E_USER_ERROR) ama bu kurtarılabilir değil. Eğer bunlardan birini tetiklemesi, yürütme programıdururbu noktada. Bu, önemli hatalar, İstisnalar kullanılmalıdır nedeni budur. Bu şekilde, programın akışı üzerinde daha fazla kontrole sahip olacak:

// Example (pseudo-code for db queries):

$db->query('START TRANSACTION');

try {
    while ($row = gather_data()) {
       $db->query('INSERT INTO `table` (`foo`,`bar`) VALUES(?,?)', ...);
    }
    $db->query('COMMIT');
} catch(Exception $e) {
    $db->query('ROLLBACK');
}

Burada, eğer gather_data() sadece düz nalları dikti (kullanarak E_USER_ERROR die()) bir şans, bir önceki INSERT tablolar yapardı içine veritabanınızda olmasa dahi, istenen ve sen üzerinde hiçbir kontrolü ne de başına gelecek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • KliptOut KwazeeKilla

    KliptOut Kwa

    24 ŞUBAT 2010
  • sWooZie

    sWooZie

    9 ŞUBAT 2006