MyException.class.php:<?php
/**
 * 自定义异常处理类
 * @author Zhang Quan
 */
 
class MyException {
/**
 * 显示异常信息
 * @param integer $errNo 错误代码
 * @param string $errMsg 错误信息
 * @param string $errFile 错误文件
 * @param integer $errLine 错误行
 * @return none
 */
static function customErr($errNo, $errMsg, $errFile, $errLine) {
die('<font color="red"><b>错误信息:</b> ['.$errNo.'] '.$errMsg.'<br />'.
 '文件名:'.$errFile.' 行: '.$errLine.'</font>');
}

/**
 * 开启调试模式才显示错误信息
 * @param integer $errNo 错误代码
 * @param string $errMsg 错误信息
 * @param string $errFile 错误文件
 * @param integer $errLine 错误行
 * @return none
 */
static function showErr($param, $errMsg) {
$str = '';

if (DEBUG_MODE == 1) {
$str = eval("\$param or trigger_error(\$errMsg);");
}
else if (DEBUG_MODE == 0) {
$str = eval("@\$param;");
}
return $str;
}
}
?>$dbSelected = MyException::showErr('mysql_select_db(DB_NAME)', '无法连接数据库');
而我把我自定义的数据库配置文件中的host改为其他的(与原来的localhost不一致,正确应为localhost)运行时为什么会没有报错?不是应该出错吗?
String调试数据库函数MySQL

解决方案 »

  1.   

    不知道你这样做的意义何在
    但要使指令执行并有返回值,至少应写作
    $str = eval("return $param or trigger_error(\$errMsg);");
      

  2.   


    <?phpclass MyException {
        static function customErr($errNo, $errMsg, $errFile, $errLine) {
            die('<font color="red"><b>错误信息:</b> [' . $errNo . '] ' . $errMsg . '<br />' .
                    '文件名:' . $errFile . ' 行: ' . $errLine . '</font>');
        }
        static function showErr($param, $errMsg) {
            if (DEBUG_MODE == 1) {
               $str=eval('$param;') or trigger_error($errMsg);
            } else if (DEBUG_MODE == 0) {
                $str = eval('$param;');
            }
            return $str;
        }}define('DEBUG_MODE',1);
    $dbSelected = MyException::showErr('mysql_select_db(DB_NAME)', '无法连接数据库');
    ?>
      

  3.   


    再完善一下:
    <?phpclass MyException {    static function customErr($errNo, $errMsg, $errFile, $errLine) {
            die('<font color="red"><b>错误信息:</b> [' . $errNo . '] ' . $errMsg . '<br />' .
                    '文件名:' . $errFile . ' 行: ' . $errLine . '</font>');
        }    static function showErr($param, $errMsg) {
            if (DEBUG_MODE == 1) {
                set_error_handler("self::customErr");
                $str = eval('$param;') or trigger_error($errMsg);
            } else if (DEBUG_MODE == 0) {
                $str = eval('$param;');
            }
            return $str;
        }}define('DEBUG_MODE', 1);
    MyException::showErr('mysql_select_db(DB_NAME)', '无法连接数据库啊~~');
    ?>
      

  4.   

    纠正一下,2楼及3楼的代码我刚才仔细验证了,也存在问题,因为你的$param变量的值是个字符串,但希望将它做为函数来调用,现已修复为以下代码:<?phpclass MyException {    static function customErr($errNo, $errMsg, $errFile, $errLine) {
            die('<font color="red"><b>错误信息:</b> [' . $errNo . '] ' . $errMsg . '<br />' .
                    '文件名:' . $errFile . ' 行: ' . $errLine . '<br /></font>');
        }    static function showErr($param, $errMsg) {
            if (DEBUG_MODE == 1) {
                set_error_handler("self::customErr");
                $str = eval("$param or trigger_error(\$errMsg);");  //另外,你需要考虑1楼的说法,eval默认返回NULL;如果在执行的代码中有一个解析错误, eval() 返回 FALSE;如果想让eval返回某个函数的返回值,就必须加上return
            } else if (DEBUG_MODE == 0) {
                $str = eval("$param;");
            }
            return $str;
        }}define('DEBUG_MODE', 1);
    define('DB_NAME', 'abcd');
    $conn = @mysql_connect('localhost', 'root', 'cigp1086');
    $dbSelected = MyException::showErr("mysql_select_db(DB_NAME)", '无法连接数据库啊~~');
    //var_dump($dbSelected);?>