在类

时间:2016-08-30 18:03:54

标签: php exception-handling moodle httpful

我的Moodle插件中有以下PHP脚本test.php:

<?php
include('lib/httpful/httpful.phar');

    try{
        $response = \Httpful\Request::post($uri)                 
            ->body($requestbody)             
            ->send();       
    }catch (Exception $e) {
        echo "Exception occurred";
    }
?>

每当发生异常时,都会按预期显示“Exception Occurred”文本。 然后我将代码移动到类class \ http_client.php中的函数中。因此:

class http_client{
  public function doPost($uri, $requestbody){

    try{
        $response = \Httpful\Request::post($uri)                 
            ->body($requestbody)             
            ->send();       
    }catch (Exception $e) {
        echo "Exception occurred";
    }
  }
}

现在我尝试从test.php调用:

$client = new http_client();
$client->doPost($uri, $requestbody);

不再捕获异常,并在浏览器中显示堆栈跟踪。

我必须提到它只发生在Moodle中。在Moodle之外,类http_client工作正常,执行catch块。

我的设置是:Moodle 3.0.1+(版本:20151223),PHP 5.5.12,Apache 2.4.9。

提前致谢

1 个答案:

答案 0 :(得分:1)

我在这个Moodle论坛上找到了解决方案。 https://moodle.org/mod/forum/discuss.php?d=207445。由于类http_client在命名空间内(我愚蠢地忽略了这一事实),我不得不逃避异常。

因此:

}catch (\Exception $e) {
            echo "Exception occurred";
 }

\ Exception $ e而不是Exception $ e。