Ich möchte diesen Fehler abfangen:
$a[1] = 'jfksjfks';
try {
$b = $a[0];
} catch (\Exception $e) {
echo "jsdlkjflsjfkjl";
}
Bearbeiten: Tatsächlich habe ich diesen Fehler in der folgenden Zeile erhalten:
$parse = $xml->children[0]->children[0]->toArray();
php
error-handling
try-catch
Meotimdihia
quelle
quelle
set_error_handler(...)
nachfunction exceptions_error_handler...
, tnxSie können nicht mit einem Try / Catch-Block, da dies ein Fehler ist, keine Ausnahme.
Versucht immer Offsets, bevor Sie sie verwenden:
if( isset( $a[ 0 ] ) { $b = $a[ 0 ]; }
quelle
empty()
statt,isset()
weil es ein wenig anders vergleicht: php.net/manual/en/types.comparisons.phpIch weiß, es ist 2016, aber falls jemand zu diesem Beitrag kommt.
Sie können die
array_key_exists($index, $array)
Methode verwenden, um zu vermeiden, dass eine Ausnahme auftritt.$index = 99999; $array = [1,2,3,4,5,6]; if(!array_key_exists($index, $array)) { //Throw myCustomException; }
quelle
$a[1] = 'jfksjfks'; try { $offset = 0; if(isset($a[$offset])) $b = $a[$offset]; else throw new Exception("Notice: Undefined offset: ".$offset); } catch (Exception $e) { echo $e->getMessage(); }
Oder ohne die Ineffizienz, eine sehr vorübergehende Ausnahme zu erstellen:
$a[1] = 'jfksjfks'; $offset = 0; if(isset($a[$offset])) $b = $a[$offset]; else echo "Notice: Undefined offset: ".$offset;
quelle
echo
in dieelse
Klausel aufzunehmen. Das beeinträchtigt Ihre Antwort nicht, aber ich dachte, es muss darauf hingewiesen werden.Normalerweise können Sie mit dem Try-Catch-Block keine Benachrichtigungen abfangen. Sie können jedoch Hinweise in Ausnahmen umwandeln! Verwenden Sie diesen Weg:
function get_notice($output) { if (($noticeStartPoint = strpos($output, "<b>Notice</b>:")) !== false) { $position = $noticeStartPoint; for ($i = 0; $i < 3; $i++) $position = strpos($output, "</b>", $position) + 1; $noticeEndPoint = $position; $noticeLength = $noticeEndPoint + 3 - $noticeStartPoint; $noticeMessage = substr($output, $noticeStartPoint, $noticeLength); throw new \Exception($noticeMessage); } else echo $output; } try { ob_start(); // Codes here $codeOutput = ob_get_clean(); get_notice($codeOutput); } catch (\Exception $exception) { // Catch (notice also)! }
Mit dieser Funktion können Sie auch Warnungen abfangen. Ändern Sie einfach den Funktionsnamen in get_warning und ändern Sie
"<b>Notice</b>:"
in"<b>Warning</b>:"
.Hinweis: Die Funktion fängt eine unschuldige Ausgabe ab, die Folgendes enthält:
<b> Hinweis </ b>:
Um diesem Problem zu entkommen, ändern Sie es einfach in:
<b> Hinweis: </ b>
quelle
Ich bin sicher, warum der Fehler werfen, aber ich behebe einige ..
in html2pdf.class.php
on Lines 2132:
//FIX: $ctop=$corr[$y][$x][2]<=count($sw)?$corr[$y][$x][2]:count($sw); $s = 0; for ($i=0; $i<$ctop; $i++) {$s+= array_key_exists($x+$i, $sw)? $sw[$x+$i]:0;}
GLEICH In Zeile 2138:
//FIX: $ctop=$corr[$y][$x][2]<=count($sw)?$corr[$y][$x][2]:count($sw); for ($i=0; $i<$ctop; $i++) {
Das Problem, dass das Array $ sw keinen Schlüssel von $ corr [$ y] [$ x] [2] hat, also behebe ich die Schleife, um die maximale Anzahl ($ sw) zu beheben. Ich weiß nicht, ob dies eine weitere Folge erzeugt aber ich löse mein Problem und habe keine Fehler mehr ..
Also ich hoffe es funktioniert für dich .. !!! Beats Reguards
quelle