Nesneler ve PHP hata işleme

2 Cevap php

Nesneleri kullanarak, hataları işlemek için en iyi yöntem nedir?

Nesnesinin yöntemi ve hatta bazı hata varsa yöntemini çalıştırmak için almak, ya da denir A) önce

B) Sadece parametrelerini geçmek ve hata kodunu falan dönen, yöntem kendisini hata denetimini gerçekleştirmek.

, Neden seçeneği ve kısa bir açıklama almak için lütfen?

Teşekkürler orlandu63, bunun iyi bir uygulama olduğunu, ancak ne böyle bir şey için bir başlık vermelidir kullanıcı olarak ölümcül olmayan hatalar, hakkında, ve o / o değil mi?

class Sample {    

var $err_no_title = 1;

function createNewRecord ($title) {
       if (!$title) return $this->err_no_title;
    }
}

Ya da hataları bu tür durumlar kullanmak?

2 Cevap

Eğer Ö.Ö. kullanıyorsanız eğer, siz de İstisnaları kullanabilirsiniz. Benim cevabım A hem de B bir karışımıdır:

class DatabaseConnectionException extends Exception {}

class Database {
    public function connect($user, $pass, $db) {
        //Connection stuff.
        if($baduser) {
            throw new DatabaseConnectionException('Username (' . $user. ') is invalid.')
         }
         if($badpass) {
             //''
         }
    }
}

$db = new Database;
try {
    $db->connect($user, $pass, $db);
catch (DatabaseConnectionException $e) {
    die('I cannot connect to the database:' . $e);
}

Bunun avantajları nelerdir? Bilmiyorum, ama öyle görünüyor.

Sen http://php.net/exceptions ve google üzerinde daha fazla okuyabilirsiniz.

Ikinci kısmı ile ilgili olarak,

Eğer işlevinden çıkmak ve böylece hiçbir başlık varsa bir kayıt oluşturmak yok çünkü öncelikle tüm örneğin o bir "uyarı" den bir hata daha tedavi edecek. Bu yöntem, B hatalı olduğunu gösterir. Yani yöntem, bir bütün yolu.

Eğer B olurdu seçenekler sunuyoruz seçim, ama hata kodları kullanın ve bunun yerine exceptions atmayın. Tüm mantık (girişlerin da doğrulama) fonksiyonunda kapsüllenmiş.

Nedenleri şunlardır:

  1. Fonksiyon girişi için gereksinimleri değişebilir ve bu yüzden değişebilir.
  2. Senin fonksiyonun kullanıcı her zaman girişleri gibi ne olması gerektiğini, bilmiyor olabilir.
  3. Sen kesinlikle işlevini kullanın yerde doğrulama kodunu tekrarlamak istemiyorum.

Istisnalar sadece nesne yönelimli kod tarafından yükseltilmiş olarak, olsa da dikkatli olun. Örneğin, bu kod bir istisna ateş etmiyor:

<?php  
  $number = $number / 0;
?>

Sizin örnek gibi olacaktır:

<?php
    class Sample {    
      function createNewRecord ($title) {
       if (!$title) throw new Exception('Title required');
      }
    }

    ...
    try {
      $mysample->createNewRecord($title);
    } catch ($ex) {
      echo "Could not create record. Please try again. (Reason: $ex)";
    }
    ...
?>

İlk etapta, bu tür bir şey kullanıcı arabiriminde valide edilmelidir. Yani bir olur, ama B orada olması gerekiyor. Yani nihai kararı olacaktır: Her iki.