PHP echo 与 return

刚开始学习微信公众号后台的开发,在第一个脚本就出现了问题,token验证总是失败。。。发现是echoreturn之间的问题

借此机会,我了解了一下PHP中echoreturn的区别,做了一点分析。


先说 echo

根据官方文档:

(PHP 4, PHP 5, PHP 7)
echo — 输出一个或多个字符串

void echo ( string $arg1 [, string $... ] )

输出所有参数。不会换行。

echo 不是一个函数(它是一个语言结构), 因此你不一定要使用小括号来指明参数,单引号,双引号都可以。 echo (不像其他语言构造)不表现得像一个函数, 所以不能总是使用一个函数的上下文。 另外,如果你想给echo 传递多个参数, 那么就不能使用小括号。

根据官方文档,我们可以知道echo是php的语言结构(语法的一部分),而不是一个函数,一个明显的区别是echo不能作为回调函数被 call_user_func() 等函数所调用。echo普遍用于输出单个或多个字符串


再说return

官方文档:

(PHP 4, PHP 5, PHP 7)
如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止 eval() 语句或者脚本文件的执行。

如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被 include 的或者 require 的,则控制交回调用文件。此外,如果当前脚本是被 include 的,则 return 的值会被当作 include 调用的返回值。如果在主脚本文件中调用 return,则脚本中止运行。如果当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件中止运行。

return 在所有有返回值的函数中都会用到,是php中源自C语言的一个基本语言结构。通过返回数组的形式可以实现多个返回值。


echo & return

  • echoreturn 均为PHP的语言结构,在使用中不需要括号,使用括号会造成语义的变化

    • echo() 只能输出一个字符串
    • return() 返回的是括号表达式的值
  • 在传输数据的过程中:

    • echo会输出数据,适合于php与浏览器、 javascript之间进行通信,或者不同服务器之间进行通信
    • return返回数据但是不输出,适合不同PHP脚本之间进行通信

      在写WeChat的接入脚本时,我使用的是return,然而在设置服务器配置时发现token验证失败,查错N遍没有发现问题,后参考了前辈的代码发现使用echo来返回字符串,遂改正,通过验证。

      echo输出数据,是会向调用脚本的进程输出字符串,而return在调用完成后返回的字符串,并不会输出,仅仅是保留下来等待程序的调用,因此在WeChat与服务器的通信中,接收不到return返回的值,而使用echo时会有输出,可以接收到。

    因此,当我们向服务器发送请求(request),要获得服务器返回的数据(即进行HTTP/HTTPS通信)时,我们应该用echo来输出数据,这样数据才会存在于服务器的response(返回数据)里,而在服务器本地不同脚本之间互相调用(include等)时,使用return返回数据并且可以保存,而不会产生输出。(不了解request/response请查阅HTTP原理(其实我也不了解:P))

你可能感兴趣的:(PHP)