обяснение кога се използва try

embaka

Registered
здравейте, някой може ли да ми обясни в кои случаи се използва следното нещо try, throw new, catch и throw и какво трябва да значат


Код:
<?php
class MyException extends Exception { }

class Test {
    public function testing() {
        try {
            try {
                throw new MyException('foo!');
            } catch (MyException $e) {
                /* rethrow it */
                throw $e;
            }
        } catch (Exception $e) {
            var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();
?>
 
Exception-ите са един много важен и добър елемент на обектно-ориентираното програмиране. Най-добре виж в гугъл за повече теоретична информация.

На кратко това са грешки. Ако в една функция възникне грешка тя е най-добре да "хвърли" exception (изключение). Тоест изключение от стандартните резултати в тази функция. Като се хвърли такава грешка тя спира изпълнението на кода по-натам. Изключенията се изкачват по реда, в който са викани функциите, докато някъде не бъдат "хванати".

Хващат се чрез try/catch:

class Test {
public function testing() {
throw new Exception();
}
}

$foo = new Test;

try {
$foo->testing();
echo "Функцията testing() приключи БЕЗ грешки";
} catch ( Exception $e )
{
echo "Възникна грешка във функцията testing()";
}
 
PHP:
		try{
			
			// condition :  1 === 2
			if(!conditions){
				throw new Exception('message #1');
			}
			
			// condition :  mysql_connect(...)
			if(!conditions){
				throw new Exception('message #2');
			}			
		
		        // condition : mysql_select_db(...)
			if(!conditions){
				throw new Exception('message #3');
			}
			
		} catch (Exception $e){
                       // dump $e
                        echo '<pre>';
                        print_r($e);
                        echo '</pre>';
                       
                       // get exception message
			echo $e->Message();
		}
 
Ето един реален пример как се използва try,catch,throw. В случая променливата трябва да е число, ползваме preg_match, за да направим проверка. :)

Код:
try {
    if (!preg_match('#^\d{1,10}$#', $varName)) {
        throw new Exception("varName трябва да е число!");
    }
 
    if (!isset($varName)) {
        throw new Exception('varName не съществува');
    }
 
    $status->message('Всичко е ОК!');
}

catch (Exception $e) {
    $status->error($e->getMessage());
}
 

Back
Горе