1

我的 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";
    }
?>

每当发生异常时,都会按预期显示文本“发生异常”。然后我将代码移动到类中的一个函数,classes\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。

提前致谢

4

1 回答 1

1

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

因此:

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

\Exception $e 而不是 Exception $e。

于 2016-08-31T04:13:50.747 回答