gpt4 book ai didi

php - 如何在 PHP 和 MongoDB 中正确捕获异常

转载 作者:可可西里 更新时间:2023-11-01 09:58:52 26 4
gpt4 key购买 nike

我的问题是关于在 PHP 中捕获异常的正确方法。基于随附的 examples PHP MongoDB 驱动程序,我已创建以下脚本:

<?php

try {

$mng = new MongoDB\Driver\Manager("mongodb://localhost:2717");
$query = new MongoDB\Driver\Query([], ['sort' => [ 'name' => 1], 'limit' => 5]);

$rows = $mng->executeQuery("testdb.cars", $query);

foreach ($rows as $row) {

echo "$row->name : $row->price\n";
}

} catch (MongoDB\Driver\Exception\Exception $e) {

$filename = basename(__FILE__);

echo "The $filename script has experienced an error.\n";
echo "It failed with the following exception:\n";

echo "Exception:", $e->getMessage(), "\n";
echo "In file:", $e->getFile(), "\n";
echo "On line:", $e->getLine(), "\n";
}

?>

该示例具有教育意义,旨在在 PHP CLI 上运行。在 PHP CLI 中,我们在控制台上获取所有异常,但出于教学目的,我想在 try/catch block 中捕获异常。

我看到的 Java 代码比 PHP 多,因此,捕获通用 MongoDB\Driver\Exception\Exception 对我来说不太好。在 Java 中,我们捕获特定的异常,并针对不同类型的异常使用多个 try/catch block 。

驱动程序有以下异常:

MongoDB\Driver\Exception\AuthenticationException
MongoDB\Driver\Exception\BulkWriteException
MongoDB\Driver\Exception\ConnectionException
MongoDB\Driver\Exception\ConnectionTimeoutException
MongoDB\Driver\Exception\Exception
MongoDB\Driver\Exception\ExecutionTimeoutException
MongoDB\Driver\Exception\InvalidArgumentException
MongoDB\Driver\Exception\LogicException
MongoDB\Driver\Exception\RuntimeException
MongoDB\Driver\Exception\SSLConnectionException
MongoDB\Driver\Exception\UnexpectedValueException
MongoDB\Driver\Exception\WriteException

这是一种在 PHP 中捕捉异常的正确方法吗?

最佳答案

如何在 catch 部分放置一个 switch 语句,并使用 instanceof 确定异常的类型?语言构造或 get_class()功能?

例如:

[...]

} catch(\Exception $e) {
switch (get_class($e)) {
case 'MongoDB\Driver\Exception\AuthenticationException':
// do stuff
break;

case 'MongoDB\Driver\Exception\BulkWriteException':
//etc, etc...
}
}

首先,我会检查 get_class() 的返回值,以确保您将结果与确切的异常名称进行比较。

关于php - 如何在 PHP 和 MongoDB 中正确捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36863230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com