刚开始学习微信公众号后台的开发,在第一个脚本就出现了问题,token验证总是失败。。。发现是
echo
和return
之间的问题
借此机会,我了解了一下PHP中echo
和return
的区别,做了一点分析。
先说 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
echo
与return
均为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))