7

フォローコードでどのようにキャッチできるかわかりませPDOExceptionん。フォローコードのどこで例外をスローするか教えてください。

私は(ディレクトリ)を持っています:

 - folder
     -1) b.php
     -2) c.php

 - autoloader

b.php

<?php
namespace folder;
use folder as x;
require_once '../autoload.php';
class b{
    function __construct(){
        print("<p>you are in class b<p/>");
    }
}
$t=new x\c();
?>

とでc.php

class c{
    function __construct(){
        print("<p>you are in class c<p/>");

        if(DB_TYPE == 'mysql')  
        $pdoString=DB_TYPE.':dbname='.DB_NAME.';host='.DB_HOST;

        $pdoUsername=DB_USERNAME;
        $pdoPass='1';//DB_PASS; in this line I enter wrong password

    try{
            $this->pdo = new PDO($pdoString, $pdoUsername, $pdoPass);

    }catch(PDOException $e){ //we can't catch exception here!
        die('<p> Error DataBase Connection: '.$e->getMessage()."</p>");
    }
}
}
?>

間違ったパスワードを入力しました。try catchブロックで例外をキャッチしたと思いますが、次の出力があります。

 you are in class c

 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)' in C:\xampp\htdocs\TEST\folder\c.php:17 Stack trace: #0 C:\xampp\htdocs\TEST\folder\c.php(17): PDO->__construct('mysql:dbname=kn...', 'root', '1') #1 C:\xampp\htdocs\TEST\folder\b.php(10): folder\c->__construct() #2 {main} thrown in C:\xampp\htdocs\TEST\folder\c.php on line 17
4

1 に答える 1

16

名前空間にいます。したがって、PHPは名前空間化されたクラスを探し、それfolder\PDOExceptionをキャッチしようとします(そして失敗します)。

グローバル名前空間を使用するには、クラス名の後ろに円記号を追加するだけです。

catch (\PDOException $e) {
于 2012-11-28T21:13:45.780 に答える