20

我正在尝试调试一些代码。我希望能够显示在中定义的try变量catch。例如变量$siteId

<?php
try {
    $siteId = 3;
    if(1 !== 2) {
        throw new Exception('1 does not equal 2!');
    }
} catch(Exception $e) {
    $moreInfo = '';
    if(isset($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>

我得到的响应是Error: 1 does not equal 2!而不是Error SiteId»3: 1 does not equal 2!. 我究竟做错了什么?

4

6 回答 6

12

在 try/catch 结构外声明 $siteId 并!empty($siteId)在 catch 内使用。

$siteId = null;
try {

}catch(Exceptions $e) {
  if( ! empty($siteId) ) {

  }
}
于 2013-07-26T08:08:47.640 回答
6

PHP 中的变量的范围是文件、方法或函数,(请参阅http://php.net/manual/en/language.variables.scope.php),所以我不确定这对你不起作用. 快速剪切粘贴到 PhpStorm 会为我输出正确的响应。

于 2013-07-26T08:17:47.340 回答
3

使用时catch(),您不能使用catch (Exception $e) use($foo). 因此,一种解决方法是将 var 分配为类的状态:

private $foo;

try  {

 $foo = 'Foo';
 $this->foo = 'Foo';

} catch (Exception $e) {

   var_dump($foo); // null
   var_dump($this->foo); // 'Foo'

}
于 2018-04-19T15:55:37.293 回答
1

尝试添加\Exception课堂。所以你的代码变成:

<?php
try {
    $siteId = 3;
    if(1 !== 2) {
        throw new \Exception('1 does not equal 2!');
    }
} catch(\Exception $e) {
    $moreInfo = '';
    if(isset($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>
于 2018-03-29T12:57:53.447 回答
0

尝试从 try/catch 中移出 $siteId:

<?php
$siteId = 3;
try {        
    if(1 !== 2) {
        throw new Exception('1 does not equal 2!');
    }
} catch(Exception $e) {
    $moreInfo = '';
    if(isset($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>
于 2013-07-26T08:16:24.143 回答
0
<?php
$siteId = 3;
try {

    if(1 !== 2) {
        throw new Exception('1 does not equal 2!');
    }
} catch(Exception $e) {
    $moreInfo = '';
    if(!empty($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>
于 2019-12-30T00:28:08.963 回答