Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FacebookPHP SDK抛出一个不可修补的OAutheException_Php_Facebook_Facebook Graph Api_Facebook Php Sdk - Fatal编程技术网

FacebookPHP SDK抛出一个不可修补的OAutheException

FacebookPHP SDK抛出一个不可修补的OAutheException,php,facebook,facebook-graph-api,facebook-php-sdk,Php,Facebook,Facebook Graph Api,Facebook Php Sdk,我正试图向Facebook graph API发布一个open graph操作,但收到一个OAuth异常(#3501)用户已与该关联。这一切都很好,我希望Facebook会抛出这个例外。我还有一些关于用户身份验证的例外情况(可能是旧的/过时的会话,等等) 我的问题是,有没有其他人体验过这个异常在php中是不可修补的?在这个特定的示例(发布图形操作)中,我绝对是在try/catch语句中包装对api的调用;但我还是犯了致命的错误 <?php try { //publishing to

我正试图向Facebook graph API发布一个open graph操作,但收到一个OAuth异常
(#3501)用户已与该
关联。这一切都很好,我希望Facebook会抛出这个例外。我还有一些关于用户身份验证的例外情况(可能是旧的/过时的会话,等等)

我的问题是,有没有其他人体验过这个异常在php中是不可修补的?在这个特定的示例(发布图形操作)中,我绝对是在try/catch语句中包装对api的调用;但我还是犯了致命的错误

<?php
try {
    //publishing to open graph
    $this->fb->api('/me/app:action', 'POST', array(
        'object' => 'http://www.domain.com/path/to/graph/object',
    ));
}
catch (Exception $e)
{
    /*
        We may get here if the user has already posted this action before...
        or if our session somehow went sour
        or bc facebook is down...
        or one of any other 1000 reasons the graph api is currently 
        sucking...

        in any case it doesn't much matter, this is not a mission critical 
        thing to worry about; if we don't post the graph action - we don't
        post the graph action..nbd.
    */
}

在这种情况下,我们没有得到任何结果,它看起来更像是一个典型的致命错误:

PHP Fatal error:  Uncaught OAuthException: (#3501) User is already associated \
to the <object> object on a unique action type <action>. Original Action ID: \
123123123
    thrown in /path/to/app/libs/fb/base_facebook.php on line 1107, \
    referer: http://www.domain.com/path/to/page
PHP致命错误:未捕获的OAutheException:(#3501)用户已关联\
以唯一的操作类型创建对象。原始操作ID:\
123123123
在1107行的/path/to/app/libs/fb/base_facebook.php中抛出\
推荐人:http://www.domain.com/path/to/page
我搞不懂为什么这个被遗忘的“例外”如此奇怪/不可追踪

解决方案: 我找到了自己问题的答案;我在下面添加了它——这是开发人员的错误,不是bug。答案如下


另外,如果您想说能够引用类定义作为对
catch
定义的类型提示,而该定义并不存在(或在当前名称空间中不可用),那么这很可能是一个bug的一部分。

因此,上面没有概述的是,我正在使用PHP名称空间。这是一个大问题,因为名称空间对php来说是相对较新的,我觉得它非常容易被忽视。无论如何,这是一个相当愚蠢的疏忽/错误

如果您位于已定义的命名空间(即,不是根(\)命名空间)中,则无法直接访问
Exception
类。php没有发出关于不知道该类是什么的警告,它只是忽略了一个事实,即它不知道该类是什么,并且没有捕获异常

解决方案1:

导入异常类:

<?php
use \Exception;

// ...codes

try {
    //...codes
}
catch (Exception $e)
{
    //...codes
}
<?php
try {
    //.....
}
catch (\Exception $e)
{
    // voila.
}

<?php
use \Exception;

// ...codes

try {
    //...codes
}
catch (Exception $e)
{
    //...codes
}
<?php
try {
    //.....
}
catch (\Exception $e)
{
    // voila.
}