Cum pot gestiona elegant o condiție de eroare?

14 ian. 2011, 22:25:25
Vizualizări: 325
Voturi: 1

Plugin-ul meu îngheață execuția paginii în momentul în care apelează funcțiile de mai jos.

Am două probleme...

1) Cum pot rescrie funcția astfel încât, dacă apare o eroare, plugin-ul să nu oprească încărcarea paginii, ci să returneze un mesaj de eroare?

2) Cum pot identifica care ar putea fi eroarea? Acum doar îngheață fără să afișeze eroarea.

function rseo_get_seo($check, $post){
 //returnează false;
    switch ($check)
    {
    case "h1": return rseo_doTheParse('h1', $post);
    case "h2": return rseo_doTheParse('h2', $post);
    case "h3": return rseo_doTheParse('h3', $post);
    case "img-alt": return rseo_doTheParse('img-alt', $post);
    }
}

function rseo_doTheParse($heading, $post)
{
    $content = $post->post_content;
    if($content=="") return false;
    $keyword = trim(strtolower(rseo_getKeyword($post)));
    @$dom = new DOMDocument;
    @$dom->loadHTML(strtolower($post->post_content));
    $xPath = new DOMXPath(@$dom);
    switch ($heading)
        {
        case "img-alt": return $xPath->evaluate('boolean(//img[contains(@alt, "'.$keyword.'")])');
        default: return $xPath->evaluate('boolean(/html/body//'.$heading.'[contains(.,"'.$keyword.'")])');
        }
}

Iată încercarea mea de a modifica a doua funcție cu try catch dar primesc o eroare fatală la activarea plugin-ului...

function rseo_doTheParse($heading, $post){
try { //Primesc o eroare FATAL aici. '{' neașteptat
    $content = $post->post_content;
    if($content=="") return false;
    $keyword = trim(strtolower(rseo_getKeyword($post)));
    @$dom = new DOMDocument;
    @$dom->loadHTML(strtolower($post->post_content));
    $xPath = new DOMXPath(@$dom);
    switch ($heading)
        {
        case "img-alt": return $xPath->evaluate('boolean(//img[contains(@alt, "'.$keyword.'")])');
        default: return $xPath->evaluate('boolean(/html/body//'.$heading.'[contains(.,"'.$keyword.'")])');
        }
    }
    catch (Exception $e)
    {
        echo 'Excepție prinsă: ',  $e->getMessage(), "\n";
    }
}
2
Comentarii

încearcă să elimini caracterul @ din fața lui $dom

onetrickpony onetrickpony
14 ian. 2011 23:20:57

Try/catch funcționează doar în PHP 5+. Ce versiune rulezi?

MathSmath MathSmath
15 ian. 2011 00:54:39
Toate răspunsurile la întrebare 2
0

Pentru depanare, puteți folosi și următoarea sintaxă în loc de try/catch:

if (!$x) {
   throw new Exception('Împărțire la zero.');
}
else return 1/$x;

sau folosiți vechiul var_dump($x); care de multe ori vă spune suficient pentru a continua.

28 ian. 2011 15:15:50
0

Această linie este greșită:

$xPath = new DOMXPath(@$dom);

Ar trebui să fie așa:

$xPath = new DOMXPath($dom);
28 feb. 2011 03:01:34