0

我正在设置 Twilio 并尝试向我的个人手机发送一条简单的短信。但我得到的只是标题中的这个错误+这发生在第 127 行的 Services/Twilio/Resource.php 上:

public function __toString() {
    $out = array();
    foreach ($this as $key => $value) {
        if ($key !== "client" && $key !== "subresources") {
            $out[$key] = (string)$value; <----------------HERE
        }
    }
    return json_encode($out);
}

我在控制器上的代码如下所示:

$client = new Services_Twilio($AccountSid, $AuthToken);
        try {
            foreach($listUsers as $user){
                $sms = $client->account->sms_messages->create(
                    $phone, // From this number
                    $user['phone'], // To this number
                    $message
                );
            }
            $data['results'] = "success";
            $data['message'] = "Your message have been sent successfully";
            echo json_encode($data);
        } catch (Services_Twilio_RestException $e) {
            $data['results'] = "error";
            $data['message'] = $e->getMessage();
            echo json_encode($data);
        }

我现在坐了几个小时,似乎无法弄清楚问题所在。也许有人用过这个 Twilio,至少可以给我一个提示。

整个错误:

PHP Catchable fatal error:  Object of class Services_Twilio_TinyHttp could not be converted to string in ../Services/Twilio/Resource.php on line 127, referer: 
4

2 回答 2

2

错误不是异常,它们不是thrown 并且不能被catch编辑。错误可以通过注册的错误处理程序来处理set_error_handler。现在,有几种致命错误类型,例如E_ERRORor E_CORE_ERROR,任何错误处理程序都无法处理它们;这些错误是致命的并停止脚本执行,句号(或句号,如果您愿意;))。但也有一个E_RECOVERABLE_ERROR,它是这样描述的:

可捕获的致命错误。它表示发生了可能危险的错误,但并未使引擎处于不稳定状态。如果错误未被用户定义的句柄捕获(另请参见set_error_handler()),应用程序将中止,因为它是一个E_ERROR.

http://www.php.net/manual/en/errorfunc.constants.php

因此,您可以使用自定义错误处理程序来处理这些错误。您应该这样做主要是为了编写自定义错误日志或发送警报邮件,但您仍然应该在之后终止脚本(尽管您不是被迫的)。它只是被描述为“可捕获的错误”,尽管它与try..catch.


在您的情况下,错误的原因是您试图将对象转换为字符串,但对象不喜欢那样。您应该查看该类的文档,如何处理对象以及如何从中获取所需的数据。(string)不起作用,简单明了。

于 2013-11-07T15:34:17.693 回答
0

您应该能够通过调用 echo 或类似方法将任何资源,例如 $client->account, $message = $client->account->messages->get('MM123') 转换为字符串。

看起来您正试图将 http 客户端 ($client->http) 转换为字符串。http 客户端没有定义 tostring 方法。

于 2013-11-07T17:18:10.050 回答