PHP-Ausnahmen abfangen und behandeln ~
Das System verfügt über eine Ausnahmebehandlung<?php<br />
header("Content-type:text/html;charset=utf-8");<br />
try<br />
{<br />
//业务处理 错误时抛出异常。<br />
$age = 130;<br />
if ($age > 120) {<br>
throw new Exception('年龄不能大于120岁。', 1001);<br>
}<br>
} catch (Exception $e) {<br>
$err = [<br>
'code' => $e->getCode(),<br>
'msg' => $e->getMessage(),<br>
'file' => $e->getFile(),<br>
'line' => $e->getLine()<br>
];<br>
echo json_encode($err);<br>
}<br>
<br>
输出:{"code":1001,"msg":"u5e74u9f84u4e0du80fdu5927u4e8e120u5c81u3002","file":"/data/mi/demo.php","line":11}
header("Content-type:text/html;charset=utf-8");
versuche es<?php<br />
header("Content-type:text/html;charset=utf-8");<br />
class proException extends Exception<br />
{<br />
//根据业务需求,自定义方法<br />
/**<br />
* 获取错误信息<br />
* @param int $type 类型 1=json 2=数组<br />
* @return array<br />
*/<br />
public function getErrorInfo($type = 2)<br />
{<br />
$err = [<br />
'code' => $this->getCode(),<br>
'msg' => $this->getMessage(),<br>
'file' => $this->getFile(),<br>
'line' => $this->getLine()<br>
];<br>
if ($type == 1) {<br>
return json_encode($err);<br>
}<br>
return $err;<br>
}<br>
}<br>
<br>
try<br>
{<br>
//业务处理 错误时抛出异常。<br>
$age = 130;<br>
if ($age > 120) {<br>
throw new proException('年龄不能大于120岁。', 1001);<br>
}<br>
} catch (proException $e) {<br>
$info = $e->getErrorInfo();<br>
var_dump($info);<br>
}<br>
<br>
输出:array(4) { ["code"]=> int(1001) ["msg"]=> string(27) "年龄不能大于120岁。" ["file"]=> string(17) "/data/mi/demo.php" ["line"]=> int(53) }
{<b>
//Ausnahme ausgelöst, wenn ein Geschäftsverarbeitungsfehler auftritt. </b>
$age = 130;<code class="prettyprint linenums lang-php">
Wenn ($age > 120) {<br>
throw new Exception('Das Alter darf nicht größer als 120 Jahre sein.', 1001);<br>
}<br>
} Catch (Ausnahme $e) {<br>
$err = [<br>
'code' => $e->getCode(),<br>
'msg' => $e->getMessage(),<br>
'file' => $e->getFile(),<br>
'line' => $e->getLine()<br>
];<br>
Echo json_encode($err);<br>
}<br>
<br>
Ausgabe: {"code":1001,"msg":u5e74u9f84u4e0du80fdu5927u4e8e120u5c81u3002, "file": /data/mi/demo.php, "line":11}
Benutzerdefinierte Ausnahmebehandlung
header("Content-type:text/html;charset=utf-8");<🎜>
Klasse proException erweitert Exception<🎜>
{<🎜>
//Passen Sie die Methode entsprechend den Geschäftsanforderungen an <🎜>
/**<🎜>
* Fehlermeldung erhalten<🎜>
* @param int $type type 1=json 2=array<🎜>
* @return array<🎜>
*/<🎜>
Öffentliche Funktion getErrorInfo($type = 2)<🎜>
{<🎜>
$err = [<🎜>
'code' => $this->getCode(),
'Msg' = & gt; $ this- & gt;
‚line‘ => $this->getLine()
];
If ($type == 1) {
return json_encode($err);
}
return $err;
}
}
versuche es
{
//Ausnahme ausgelöst, wenn ein Geschäftsverarbeitungsfehler auftritt.
$age = 130;
Wenn ($age > 120) {
throw new proException('Das Alter darf nicht größer als 120 Jahre sein.', 1001);
}
} Catch (proException $e) {
$info = $e->getErrorInfo();
var_dump($info);
}
Ausgabe: array(4) { ["code"]=> int(1001) ["msg"]=> "Das Alter darf nicht älter als 120 Jahre sein." string(17 ) "/data/mi/demo.php" ["line"]=> int(53) Mehrere Ausnahmen abfangen
header("Content-type:text/html;charset=utf-8");<🎜>
Klasse proException erweitert Exception<🎜>
{<🎜>
//Passen Sie die Fehlermethode an die Geschäftsanforderungen an<🎜>
<🎜>
/**<🎜>
* Fehlermeldung erhalten<🎜>
* @param int $type type 1=json 2=array<🎜>
* @return array<🎜>
*/<🎜>
Öffentliche Funktion getErrorInfo($type = 2)<🎜>
{<🎜>
$err = [<🎜> 'code' => $this->getCode(),
'Msg' = & gt; $ this- & gt;
‚line‘ => $this->getLine()
];
If ($type == 1) {
return json_encode($err);
}
return $err;
}
}
versuche es
{
If ($_GET['age'] > 100) {
Wirf eine neue proException('Customized Exception Handling', 1002);
} sonst {
Neue Ausnahme auslösen('Ausnahmebehandlung des Systems', 1002);
}
} Catch (proException $e) {
$info = $e->getErrorInfo();
var_dump($info);
} Catch (Ausnahme $e) {
echo $e->getMessage();
}
?age=110 Ausgabe: array(4) { ["code"]=> ["msg"]=> 17) "/data/mi/demo.php" ["line"]=>(64) }
?age=20 Ausgabe: Systemausnahmebehandlung.
Protokollierung//Fehlerausgabe deaktivieren
error_reporting(0);
//Fehlerbehandler festlegen<br>
set_error_handler('errorHandler');<br>
//Funktion zur Ausführung am Ende des Skripts<br>
register_shutdown_function('fatalErrorHandler');<br>
<br>
/**<br>
* Fehlerbehandlung <br>
* @param int $err_no Fehlercode<br>
* @param string $err_msg Fehlermeldung<br>
* @param string $err_file Fehlerdatei<br>
* @param int $err_line Fehlerzeilennummer<br>
* @return string<br>
*/<br>
Funktion errorHandler($err_no = 0, $err_msg = '', $err_file = '', $err_line = 0)<br>
{<br>
$log = [<br>
'['.date('Y-m-d h-i-s').']',<br>
'|',<br>
$err_no,<br>
'|',<br>
$err_msg,<br>
'|',<br>
$err_file,<br>
'|',<br>
$err_line<br>
];<br>
$log_path = '/data/mi/test.txt';<br>
error_log(implode(' ',$log)."rn",3, $log_path);<br>
//echo implode(' ',$log)."<br>";<br>
}<br>
<br>
/**<br>
* Schwerwiegende Fehler erkennen<br>
* @return string<br>
*/<br>
Funktion fatalErrorHandler() {<br>
$e = error_get_last();<br>
switch ($e['type']) {<br>
Fall 1:<br>
errorHandler($e['type'], $e['message'], $e['file'], $e['line']);<br>
Pause;<br>
}<br>
}<br>
<br>
Klasse DemoClass_1<br>
{<br>
Öffentlicher Funktionsindex()<br>{<br>
//Hier tritt ein Warnfehler auf, starte errorHandler<br>
echo $undefinedVarible;<br>
}<br>
}<br>
<br>
$demo_1 = new DemoClass_1();<br>
//Hier ist ein Warnfehler aufgetreten, der von errorHandler<br> erfasst wurde
$demo_1->index();<br>
//Ein schwerwiegender Fehler tritt auf und das Skript wird nicht mehr ausgeführt und löst fatalErrorHandler<br> aus
$demo_2 = new DemoClass_2();<br>
$demo_2->index();<br>
<br>
Nach dem Einschalten des Echos wird Folgendes ausgegeben: <br>
[2016-08-07 09-01-34] |. 8 |. Undefinierte Variable: undefinierte Variable |
[2016-08-07 09-01-34] |. 1 |. Klasse 'DemoClass_2' nicht gefunden |. /data/mi/demo.php |
1. register_shutdown_function kann auch beim API-Debugging verwendet werden, um jeden Anforderungswert und Rückgabewert aufzuzeichnen und das Debuggen zu erleichtern. <br>
2. Der Vorteil der Verwendung von „|“ zum Teilen besteht darin, dass es praktisch ist, das Protokoll mit awk zu teilen.
Quelle: http://mp.weixin.qq.com/s?__biz=MjM5NDM4MDIwNw==&mid=2448834645&idx=1&sn=32c96f1344a270755a8e33a6f7ddc1e8#rd
Für mehr [trockenen Informationsaustausch] folgen Sie bitte meinem persönlichen Abonnementkonto.