写php API写的不多,最近才开始接口的写法,在框架里面一直用return,可是在api中retrun就失效了,为何呢?php
网友给出的答案:前端
1.json
return 通常用于函数或方法的返回。
echo 才是输出(也就是显示)
若是你不输出,api有何做用。
2.segmentfault
return只能在php内部使用
对外,你要给别人解析,你就理解成输出,用echo
3.后端
固然是echo了,若是是json最好加上header标识 <?php $ret = array( 'name' => 'fdipzone' ); header('content-type:application/json;charset=utf8'); echo json_encode($ret); ?>
1.给 app写接口时,要用 echo json_encode() 来返回数据,可是PHP自身调用却用 return json_encode();api
rerurn是语言中函数或者方法所表明的值,跟变量同样,储存在内存中。return是给其余代码块一个指针或者引用。
而服务器与app(客户端)交互时,他们没法读取同一个内存系统,只能经过文本这样的方式来交换信息。
因此要echo一段文本(json)给客户端。
php惯用的输出流方式就是echo,若是你钟情于return输出,能够自创一门语言来实现。
2.浏览器
我是这么理解的,无论什么程序,你总要输出吧,那怎么输出呢?PHP脚本,也就是用到<?php ?> 标记起来的这些,都要靠PHP来解析的,那你要输出确定要用到echo,die,exit,print_r,
用return是输出不了的,return就是返回的意思,我(主程序)调方法,方法给我返回结果。
3.服务器
框架自己会对你的函数返回的字符串进行输出,要输出最终都是echo。。只是框架基本都是封装了response对象;echo是输出 只有输出的内容http请求的时候才能获取到
而php内部调用没有http请求
return 做为函数返回值或结束语句,是返回的数据的指针,也就是数据存放的地址,而接口须要返回的是真实的数据,app
由于先后端使用的是不一样的内存系统,因此没法根据地址找到相应的数据,而echo print sprinf等这些可以在浏览器中打印数据的函数都是基于http协议传输的真是数据,因此在前端是能够获取和判断的.框架
须要注意的是,在tp框架中,return关键字的确是能够给返回数据的,也就是能够做为接口返回数据关键字的,可是用原生的php是不行的,这应该是tp框架内部作过处理了!