echo & return
今天为了一个echo和return的问题忙了一整天,经过无数次试错,终于发现api前端调用没有数值的原因是因为没有用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))
储存地址区别
return
作为函数返回值或结束语句,是返回的数据的指针,也就是数据存放的地址,而接口需要返回的是真实的数据,因为前后端使用的是不同的内存系统,所以无法根据地址找到相应的数据,而echo
print
sprinf
等这些能够在浏览器中打印数据的函数都是基于http协议传输
的真实数据,所以在前端是可以获取和判断的.
框架里面返回数据用的return,但是原生的php返回数据用echo
Ajax用echo而非return
PHP在处理ajax返回值
的时候,如果使用return
如 return $result
会失败,echo $result
却没问题。解释原因如下:
1.ajax请求
从服务器端读取返回值,而且这些返回值必须为一些可读的数据类型, 例如json或html。为了打印这些返回值 你需要echo,但是return则不会打印出来数据 它只是简单的在服务器上传递数据。
2.Ajax
获取返回值是使用HTTP请求。 return
不会产生输出(只在server端进行),而echo
可以(从server -> brower,http协议)。Ajax请求的url其实就是一个页面,它可以在浏览器显示,而 php中以return返回数据只是在服务器端去返回这些数据。
综上所述,如果ajax 地址
是一个PHP return
,将不会获取到正确数据。