Лучший способ удалить информацию трассировки из метода PDOException __toString - PullRequest
1 голос
/ 05 октября 2010

Можно ли удалить элементы трассировки из __toString.

Мне нужно что-то вроде этого.

class DBException extends PDOException
{
public function __toString()
{
    return get_class($this) . " '{$this->getMessage()}' in {$this->getFile()}({$this->getLine()})\n";
}
}

Я пробовал описанный выше метод, но он непохоже на работу.Любые идеи?

Если я буду использовать блок try catch ниже в качестве примера, я все равно получу данные трассировки.

try {

// Do something here

}catch(DBException $e) {
    echo $e;

}

Я бы подумал, что отображение $ e вызовет метод __toString вмой класс DBException.

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

Как то так?

public function __toString() {
    $return = "Class: ".get_class($this)
             ."\nMessage: ".$this->getMessage()
             ."\nFile: ".$this->getFile()
             ."\nLine: ".$this->getLine()."\n";
    return $return;
}
0 голосов
/ 05 октября 2010

То, что я делал в прошлом, когда я хотел обработать Исключение с PDO (в этом случае, чтобы гарантировать, что детали соединения не отображаются пользователю), это расширить класс PDO и ненадолго изменить обработчик исключения:

class extendedPDO extends PDO
{
    public static function exception_handler(Exception $exception)
    {
        // Output the exception details
        die('<h1>Database connection error<p>' . $exception->getMessage() . '</p>');
    }

    public function __construct($dsn, $username=null, $password=null, $options=array())
    {
        // Temporarily change the PHP exception handler while we . . .
        set_exception_handler(array(__CLASS__, 'exception_handler'));

        // Create PDO
        parent::__construct($dsn, $username, $password, $options);

        // Change the exception handler back to whatever it was before
        restore_exception_handler();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...