1

我有 3 个类名“ Controller ”、“ Loader ”、“ Error ”和“ Ex_controller ”。

控制器.php

class Controller
{
     function __Construct()
     {
           $this->load = Loader::getinstant();
           $this->error = $this->load->class('Error');
     }
}

加载器.php

class Loader
{
     function class($class)
     {
           require_once($class);
           return new $class;
     }
}

错误.php

class Error
{
     function query($query)
     {
           $res = mysql_query($query)
           if($res)
           {
                  return $res;
           }else{
                  die('Could not execute query: '.mysql_error().'at line '. __LINE__ . 
                       ' in file ' . __FILE__);//does it work?If it doesn't, how to
                                                 make it work?
           }
     }
}

Ex_controller.php

class Ex_controller extends Controller
{
     function __Construct()
     {
           parent::__construct();
           $result = $this->error->query('some sql query');//(*)
     }
}

如何使用 (*)显示Ex_controller中发生错误的位置?

4

2 回答 2

1

在你的课上 Ex_controller extends Controller 添加

parent::__construct();

在 __Construct() 函数的第一行

错误类应该如何只返回错误而不进行查询....

于 2012-10-24T04:33:50.440 回答
1

首先,您应该停止使用mysql_xxx函数,因为它们正在弃用旧 API。

除此之外,在这种情况下,开始使用异常而不是普通的旧die().

if($res) {
    return $res;
}else{
    throw new Exception("Could not execute query '$query': " . mysql_error());
}

然后在控制器内部:

try {
    $result = $this->error->query('some sql query');//(*)
} catch (Exception $e) {
    die(print_r($e, true)); // do something more useful with the exception though.
}

当你捕捉到更高层的异常时print_r(),你会看到完整的堆栈跟踪,包括文件、行号和所有内容。

此外,您还有机会处理错误。

另外,如果您在PDO启用异常错误处理的情况下使用,您甚至不必再自己抛出异常。

于 2012-10-24T04:37:31.340 回答