1

「 Controller」、「Loader」、「Error」、「Ex_controller 」の3つのクラス名があります。

Controller.php

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

Loader.php

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

Error.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_controllerextendsController add

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 に答える