框架用多了,也是有坏处的,之前一直用框架写接口,返回数据时都是用的return 关键字,时间长了,就会感觉这样是理所当然,因为函数的返回值 就是用return 关键字返回.其实这样是不对的.
今天用原生的写了一个简单的登录验证页面,问题就来了,一直用的return关键字,死活都没有返回值,为此我还特意翻看了一下以前项目的代码,确实是用return关键字写的,是没问题的,因为那个项目已经上线了,至今一直都在使用,并且还在更新迭代中.
上面就是前段的js代码和后端的php代码,这段看似很简单代码,确存在着一个大的问题,那就是数据返回时,用的是return关键字,经过多次测试,上述php代码是没有返回给前端值的,也就是每次的结果都是验证失败.
刚开始一直在找问题,因为这种写法,已经被验证过很多次是没有问题的,所以就一直没考虑这方面,但是代码几句,于是索性就让php直接返回了一句 return 1,但是结果仍然是验证失败,
走到这里,才开始怀疑是return 关键词,没有给前台返回数据造成的问题,于是试着用 echo 关键字输出数据,奇迹出现了,前端出现了验证成功,
问题虽然解决了,但是还是没有搞懂其中的原理,于是开始翻阅资料,最终还是找到了一个个人感觉比较满意的答案:
return 作为函数返回值或结束语句,是返回的数据的指针,也就是数据存放的地址,而接口需要返回的是真实的数据,
因为前后端使用的是不同的内存系统,所以无法根据地址找到相应的数据,而echo print sprinf等这些能够在浏览器中打印数据的函数都是基于http协议传输的真是数据,所以在前端是可以获取和判断的.
需要注意的是,在tp框架中,return关键字的确是可以给返回数据的,也就是可以作为接口返回数据关键字的,但是用原生的php是不行的,这应该是tp框架内部做过处理了吧!这里就不在深究了,有兴趣的朋友,可以去看下tp的源码!!