PHP追加字符串并返回

PHP追加字符串并返回,php,json,Php,Json,我在PHP中有一个函数,它获取JSON输出并返回它。我要做的是返回StdClass对象,它周围有一些字符串。因此,为了清楚起见,我需要将$json包装在“json_CALLBACK()”中。因为不可能在它周围附加字符串,所以我正在寻找另一种方法来实现我要做的事情 注意:“JSON_CALLBACK()”不是函数,它只是一个字符串 这是我的密码: public function showOutput() { try { $oauth = new OAuth($co

我在PHP中有一个函数,它获取JSON输出并返回它。我要做的是返回StdClass对象,它周围有一些字符串。因此,为了清楚起见,我需要将$json包装在“json_CALLBACK()”中。因为不可能在它周围附加字符串,所以我正在寻找另一种方法来实现我要做的事情

注意:“JSON_CALLBACK()”不是函数,它只是一个字符串

这是我的密码:

    public function showOutput() {

    try {
        $oauth = new OAuth($conskey,$conssec);
        $oauth->fetch($api_base . '/uItems');
        $json = json_decode($oauth->getLastResponse());
        //return ($json);

    }
    catch(OAuthException $E) {
        return($E);
    }

    echo "JSON_CALLBACK(";
    return($json);
    echo ")"; //wont do anything since return is already called so how can i append this with return?

}

Return将是函数中的最后一行

 echo "JSON_CALLBACK(";
 return($json);// control will return back.
 echo ")";// this will not work
return
之后的任何行都不会执行

所以

有一件事我不明白,你的流量根本不会到达这条线

您可能在
try
catch

中返回了

echo "JSON_CALLBACK(" . $json . ")";
return $json;

下面是您的代码修复注释,以帮助理解更改

public function showOutput() {
    try {
        $oauth = new OAuth($conskey,$conssec);
        $oauth->fetch($api_base . '/uItems');

        //don't decode since it is already json
        //$json = json_decode($oauth->getLastResponse());

        //don't return here, you will never reach the bottom of the code
        //return ($json);

        //get the json string instead
        $json = $oauth->getLastResponse();
    }
    catch(OAuthException $E) {
        //you can leave this return in here just in case there is a problem
        //with oauth. This will stop the function if there was an error.
        return($E);
    }

    //since this wasn't decoded, it is a string of json.
    return "JSON_CALLBACK({$json})";
}

echo
打印到屏幕上,而
return
只返回一个值

在文本中没有任何包含return的点。这没有道理

如果您执行以下操作:

echo 'JSON_CALLBACK()';
return $json;
若最后一行不知何故也被执行了,那个么它将产生和程序相同的效果,因为return不会打印任何内容


如果您只想打印,请在调用函数中打印。

调用
返回
结束函数。返回后,在该函数内不会发生任何事情。因此,是否要将对象返回给调用函数,或将字符串输出到浏览器?你不能同时做这两件事——请澄清你想做什么——我知道这一点。我把我的问题编辑得更清楚了。如何添加括号?为什么要“返回$json”?调用者如何使用返回的值?你把echo和return搞混了我猜你也有三个return。您的函数永远不会到达您试图使用
JSON\u CALLBACK()
包装的代码,因为您会返回try和catch。因此,如果有错误或没有错误,您应该已经返回了。这是一个注释,不是答案。我知道这一点,您没有回答我的问题。@NiranjanNRaju我已经在try下注释掉了返回内容。我需要对JSON进行解码并围绕JSON_CALLBACK()进行包装。如果JSON不是字符串,我就不能这样做。这会将StdClass转换为字符串。@aqq那么如果希望它是字符串,就不要对它进行JSON解码。返回json字符串。@aqq angular是客户端。不需要解码json服务器端。在客户端,它需要原始json字符串,而不是php解码的对象。@JonathanKuhn它不适合我,因为它会在每个不可读的双引号之前输出json。这就是为什么我需要解码JSON输出。从技术上讲,它不是有效的JSON。但是为了解决这个问题,如果
JSON\u CALLBACK
是一个可以运行的js函数,那么您需要执行类似
JSON\u CALLBACK(JSON.parse(“{$JSON}”))
的操作。如果在JS中运行,则会将json解析为JS对象,并将结果传递给
json\u回调
echo 'JSON_CALLBACK()';
return $json;