Bir atış try catch hata işleme kullanarak doğru yolu

4 Cevap php

Aşağıda bu işleve genelinde gelmiş ve bu try / catch hata işleme kullanarak doğru yoldur wether merak ediyorum.

public function execute()
{
	$lbReturn = false;
	$lsQuery = $this->msLastQuery;
	try
	{
		$lrResource = mysql_query($lsQuery);

		if(!$lrResource)
		{
			throw new MysqlException("Unable to execute query: ".$lsQuery);
		}
		else
		{
			$this->mrQueryResource = $lrResource;
			$lbReturn = true;
		}

	}
	catch(MysqlException $errorMsg)
	{
		ErrorHandler::handleException($errorMsg);
	}
	return $lbReturn;
}

4 Cevap

Codewise it is correct/works, However the power of try-catch is that when an Exception is thrown from deep down in one of the functions you're calling.
Because of the "stop execution mid-function and jump all the way back to the catch block".

In this case there are no deep-down exceptions therefore I would write it like this:
(Assuming there is a function "handleErrorMessage" in the ErrorHandler.)

public function execute() {
    $lsQuery = $this->msLastQuery;
    $lrResource = mysql_query($lsQuery);

    if(!$lrResource) {
         ErrorHandler::handleErrorMessage("Unable to execute query: ".$lsQuery);
         return false;
    }
    $this->mrQueryResource = $lrResource;
    return true;
}

Ben daha okunabilir buluyorum.

Hayır, bu durumda bir istisna Fırlatma sadece GOTO, ama (biraz) güzel yüzü ile.

Neden yine Hataİşleyici bir çağrı :: Burada HandleException var?

Sadece istisna, ama onu yakalamak asla. Sonra app için küresel başlatma kodu aşağıdaki imza ile bir işlevi vardır:

function catchAllExceptions(Exception $e)

Sonra çağırır:

set_exception_handler('catchAllExceptions');

Bu, tüm yakalanmamış excpetions catchAllExceptions argüman () olarak geçirilen neden olacaktır. Eğer kod çoğaltma azaltmak gibi böyle bir yerde tüm yakalanmamış özel durumları işleme, iyidir.

Eğer istisna ve yakalamak bu istisna bakmak beri Peki gerçekten iyi bir uygulama değildir. Yani Visage cevap doğrudur.

  1. Sen bir genel hata işleyicisi yerine kodunuzda gibi bir tr-catch kullanımı kullanmak gerekir.
  2. Eğer hata ve oluşum türünden emin değil, bir özel durum oluştu rağmen kod yürütülmesine devam etmek istiyorsanız, o zaman bir try-catch bloğu yardımcı olacaktır.