php hata raporlama

3 Cevap php

Sınıf fonksiyonları hataları raporlama için ortak bir standart var mı?

Ben bir hata varsa eğer o dizeye ne olduğunu görebilirsiniz, böylece için hata dize geçmek bazı c fonksiyonları gördüm, sen o düşünceden için işaretçiler gerekir.

Bazen diğer değişkenler için getiriyi gerekiyor, çünkü geri dönüşü kullanmak için isteksiz.

Ben çalışıyordum Bir şey içinde bir hata anahtarı, hem de veri var standart bir dönüş nesnesi kullanıyor. Bu iş tamam gibi görünüyor, ancak diğer sınıflar ile kullanırken, biraz beceriksiz görünüyor.

işte benim en son fikir, sınıf bir iç değişken $ hata var ve her zaman bir fonksiyon denir, $ hata kaybolmasıdır ve hata dize veya dizi (hatta birden fazla hata tutunabileceği) ve ne zaman fonksiyon biz tamamlar ile güncellendi Hata boş olup olmadığını kontrol edebilirsiniz.

Ben işlevleri içinde işlevlerini kullanarak yaşıyorum burada ile sorun, ben hatayı temizleyerek sonunda. Ben farklı bir var içinde dize tutun, ve sadece bir kez önce getirisini hata onu itebilir.

incelikle ve güvenilir yapmak için başka herhangi bir fikir?

3 Cevap

Bu sıkça tartışılan bir konudur, ve hiç biri doğru cevap yoktur.

Ama burada ben aşina olduğum en sık görülen dört desenleri

  1. İstisnalar
  2. Multiple return values / Hata Kodları
  3. Hata Parametre
  4. Hata Devlet

Ve her hızlı bir örnektir

İstisnalar

function doSomething()
{
  if ( /* expression */ )
  {
    throw new Exception( 'something went wrong' );  
  }
}

//  Let the registered exception handler do the work
doSomething();

//  Or handle this call specifically
try {
  doSomething();
}
catch ( Exception $e )
{
  echo $e->getMessage();
}

Hata Kodları

function doSomething()
{
  if ( /* expression #1 */ )
  {
    return -1;
  }

  if ( /* expression #2 */ )
  {
    return -2;
  }
  return 1;
}

$return = doSomething();

switch ( $return )
{
  case -1;
    echo 'Error #1 Found';
    break;
  case -2;
    echo 'Error #2 Found';
    break;
  default:
    echo 'Success';
}

Error parametresi

function doSomething( &$error )
{
  if ( /* expression #1 */ )
  {
    $error = 'Something went wrong';
  }
}

$error = false;

doSomething( $error );

if ( $error )
{
  echo $error;
}

Hata Devlet

class Foo
{
  private $error = false;
  private $errorMsg;

  public function doSomething()
  {
    if ( /* expression */ )
    {
      $this->setError( 'Something went wrong' );
    }
  }

  public function isError()
  {
    return $this->error;
  }

  public function getErrorMsg()
  {
    return $this->errorMsg;
  }

  private function setError( $message )
  {
    $this->error = true;
    $this->errorMsg = $message;
  }
}

$f = new Foo();
$f->doSomething();

if ( $f->isError() )
{
  echo $f->getErrorMsg();
}

Siz proje için bir sistem (veya sistemlerin kombinasyonu) seçmeden önce her artılarını ve eksilerini tartmak gerekir.

Ortak bir standart yoktur. Çözüm özel ihtiyaçlarına bağlıdır.

exceptions öğrenme ve kullanmayı düşünün. Onlar evrensel bir çözüm değildir, ancak doğru kullanıldığı takdirde uzun bir yol kodunuzu daha okunaklı ve anlaşılır yapmak için gidecek.