【问题标题】:Why an Exception is not raised in PHP?为什么 PHP 中没有引发异常?
【发布时间】:2011-06-06 11:36:52
【问题描述】:
$keys = array( "layerName", "lat", "lon", "radius","CHECKBOXLIST");

$value = array();

try {

  foreach( $keys as $key ) {

    if ( isset($_GET[$key]) )
      $value[$key] = $_GET[$key];
    else
      throw new Exception($key ." parameter is not passed in GetPOI request.");
  }//foreach
}
catch(Exception $e) {
  echo 'Message: ' .$e->getMessage();
}

编写的这段代码是为了从 GET 请求中获取参数的值。如果这些参数中的任何一个没有在 GET 请求中传递,它应该引发异常。但在这种情况下,它没有。可能是什么问题?

【问题讨论】:

  • @yes123:是的。它打印来自 GET 请求的所有内容。但是如果某些东西没有通过,它不会引发异常
  • 您的代码应该可以按预期工作,因此问题可能出在您拥有的确切数据集中。

标签: php exception


【解决方案1】:

$_GET[$key] 可能已设置但没有值,因此它将为$value[$key] 分配一个空字符串值,而不是抛出一个新的异常。我会重写你的 if 语句来检查空值。

if ( isset($_GET[$key]) === true && empty($_GET[$key]) === false )
{
    $value[$key] = $_GET[$key];
}
elseif ( isset($_GET[$key]) === true && empty($_GET[$key]) === true)
{
    throw new Exception($key ." parameter is not passed in GetPOI request.");
    break;
}

【讨论】:

  • 我同意,这很可能是正在发生的事情。 GET 变量已设置但为空
【解决方案2】:

尝试在抛出异常后添加中断。像这样:

if ( isset($_GET[$key]) )
    $value[$key] = $_GET[$key];
else{
    throw new Exception($key ." parameter is not passed in GetPOI request.");
    break;
}

--编辑--

我必须快速补充一下,我尝试运行您的代码并按预期引发了异常。

【讨论】:

  • break 不应该有所作为。它应该停止执行,并引发异常。
  • 抛出异常会自动退出try 块。不需要break
  • @Ikke, @Álvaro G. Vicario - 我知道这应该是行为,我只建议在 throw 后添加一个休息时间,以防发生一些有趣的事情。不要认为这值得 IMO 投票
猜你喜欢
  • 2014-11-20
  • 1970-01-01
  • 2020-05-26
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多