작성일 댓글 남기기

try catch?? js ???

송효진

php5 에 Exception 이라는 try catch 구문이 있습니다.
하지만 단순히 try { } catch(e) { } 로 사용할 수가 없네요.
클래스를 만들어서 catch 쪽으로 throw 해야 하는것 같군요.
실제적인 ‘감지’ 기능을 못하는것 같습니다.

그래서 ‘감지’가 가능한 함수를 제작했습니다.

include ‘debug.inc’;
SHJTry([감지에러레벨]);
코드
if(false !== ($err = SHJCatch())) {
에러시 코드
}

로 사용하면 됩니다.

debug.inc
/* Debug */
if(!isset($_DEBUG)) {
$_DEBUG = false;
}

$_TRYCATCH = false;
$_ERROR = false;

function SHJErrorHandler($errno, $errstr, $errfile, $errline)
{
global $_DEBUG, $_TRYCATCH, $_ERROR;
$errname = array(E_ERROR => ‘ERROR’, E_WARNING => ‘WARNING’, E_NOTICE => ‘NOTICE’);

switch($errno) {
case E_ERROR:
case E_WARNING:
if($errstr == ‘Division by zero’) {
break;
}
case E_NOTICE:
if($_TRYCATCH & $errno) {
$_ERROR[‘no’] = $errno;
$_ERROR[‘str’] = $errstr;
$_TRYCATCH = false;
} else {
echo “

<br /> &#8220;;<br /> echo $errname[$errno].&#8217; : &#8216;.$errstr.&#8217; : &#8216;.$errfile.&#8217; : &#8216;.$errline.&#8221;<br /> &#8220;;<br /> if($_DEBUG) {<br /> print_r(debug_backtrace());<br /> }<br /> echo &#8220;<br /> “;
if($_DEBUG) {
exit;
}
}
}
}

function SHJTry($error_level = E_ALL)
{
global $_TRYCATCH;
$_TRYCATCH = $error_level;
}

function SHJCatch()
{
global $_TRYCATCH, $_ERROR;

$_TRYCATCH = false;

if(false !== $_ERROR) {
$err = $_ERROR;
$_ERROR = false;
return $err;
}

return false;
}

error_reporting(E_ALL);
set_error_handler(‘SHJErrorHandler’);

?>

test.php
include_once ‘func.inc’;
include_once “debug.inc”;

SHJTry();
$a = $b;
if(false !== ($err = SHJCatch())) {
echo ‘$a = $b 가 실패했습니다.
‘;
$b = ‘a’;
$a = $b;
echo ‘$b 에 a 를 넣고 $a 에 넣었습니다.
‘;
}

SHJTry();
$a = $b;
if(false !== ($err = SHJCatch())) {
echo ‘$a = $b 가 실패했습니다.
‘;
$b = ‘b’;
$a = $b;
echo ‘$b 에 b 를 넣고 $a 에 넣었습니다.
‘;
}

$a = $c;

?>

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다