是否可以从 __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 会触发我的 DBException 类中的 __toString 方法。
过去,当我想使用 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();
}
}
有这样的事吗?
public function __toString() {
$return = "Class: ".get_class($this)
."\nMessage: ".$this->getMessage()
."\nFile: ".$this->getFile()
."\nLine: ".$this->getLine()."\n";
return $return;
}
参加聚会有点晚了,但我查看了 php.net 上的 PDOException 文档。异常有以下方法:
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
这样你就可以使用
try {
#do something
} catch(PDOException $e) {
echo $e->getMessage() . "\n" . $e->getFile() . "\n" . $e->getLine();
}
或者您想要从异常中得到回显的任何信息。