2015-10-29 3 views
-1

У меня есть функция в PHP, которая выводит вывод JSON и возвращает его. То, что я пытаюсь сделать, это вернуть объект StdClass с некоторыми строками вокруг него. Поэтому, чтобы быть ясным, мне нужно обернуть $ json в 'JSON_CALLBACK()'. Так как невозможно добавить строки вокруг него, я ищу другой способ добиться того, что я пытаюсь сделать.PHP append string with return

Примечание: '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? 

} 
+1

вызов 'return' завершает функцию. Ничто не может произойти после возвращения, в пределах этой функции. –

+0

Итак, хотите ли вы вернуть объект вызывающей функции или вывести строку в браузер? Вы не можете сделать то же самое - пожалуйста, уточните, что вы пытаетесь сделать. – Steve

+0

Я знаю об этом. Я отредактировал мой вопрос, чтобы быть более ясным. Как я могу добавить скобку? – aqq

ответ

0

Вот код, исправленный комментариями, чтобы помочь понять изменения.

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})"; 
} 
0

Возврат будет последняя строка в функции

echo "JSON_CALLBACK("; 
return($json);// control will return back. 
echo ")";// this will not work 

Любая строка после return не будет выполнена.

Так,

return "JSON_CALLBACK($json)"; 

Одна вещь, я не понял, что ваш поток не придет к этой линии вообще.

Вы возвращение в try, а также catch

+0

Это комментарий, а не ответ – Steve

+0

Я знаю об этом, вы не отвечаете на мой вопрос. – aqq

+0

Отметьте ответ, –

0

возможно?

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

Это преобразует StdClass в строку. – aqq

+0

@aqq, тогда не json_decode, если вы хотите, чтобы это была строка. Верните строку, которая является json. –

+0

@ JonathanKuhn Я не могу, так как нужно читать мой AngularJS. – aqq

-1

echo печатает на экране, в то время как return просто возвращает значение.

Нет смысла включать текст в текст. Это не имеет смысла.

Если вы что-то вроде:

echo 'JSON_CALLBACK()'; 
return $json; 

Это будет иметь тот же эффект, что ваша программа дала бы, если как-то последняя строка также выполняется, поскольку возвращение ничего не печатает.

Если вы хотите распечатать, напечатайте в вызывающей функции.