在日常的PHP項目代碼編碼的時候,return 和 echo 兩個函數(shù),是使用最多的基本函數(shù),沒有一個項目是不使用這兩個函數(shù)的,這兩個函數(shù)使用的方法是一樣的,但是獲得的結(jié)果稍有不同,今天就來看看這兩個函數(shù)的使用方法和使用的地方。我們直接從項目中的代碼來分析他倆的不同之處,這是一個APP的項目:
前端代碼:
api.ajax({ url: '接口url地址', method: 'post', data: { } }, function(ret,err) { console.log(JSON.stringify(ret)); if(err){ console.log(JSON.stringify(err)); } });
其實這段代碼很簡單,就是一個ajax的查詢代碼,向后臺發(fā)送請求獲取后臺傳送過來的數(shù)據(jù),我們主要來看看后臺的代碼,在使用return和echo的區(qū)別在哪。
//*************************** // 獲取商品詳情接口 //*************************** public function details(){ header('Content-type:text/html; Charset=utf8'); $pro_id = intval($_REQUEST['pro_id']); $pro = M('product')->where('id='.intval($pro_id).' AND del=0 AND is_down=0')->find(); if(!$pro){ echo json_encode(array('status'=>0,'err'=>'商品不存在或已下架!')); exit(); } //$content = preg_replace("/width:.+?[\d]+px;/",'',$pro['content']); $content = htmlspecialchars_decode($pro['content']); echo json_encode(array('status'=>1,'content'=>$content)); exit(); }
這是一個簡單后臺查詢接口并返回數(shù)據(jù)的正確代碼,其中返回代碼我們使用的是echo來輸出一個json格式的字符串,下面是接口獲取到的數(shù)據(jù)
但是同樣的代碼,我們僅僅把echo 變成 return的時候呢?獲取到的數(shù)據(jù)就變成了NULL,這是為什么呢,其實很多在剛開始寫api接口的程序員,大部分都遇到這個問題,很疑惑不知道為什么使用echo就可以獲取數(shù)據(jù),而使用return就獲取不到呢,其實原因很簡單,returan常常使用在服務(wù)器內(nèi)部來獲取別的函數(shù)返回的值,不用輸出在頁面上面,return是語言中函數(shù)或者方法所代表的值,跟變量一樣,儲存在內(nèi)存中。而服務(wù)器與客戶端交互時,無法讀取服務(wù)器的內(nèi)存系統(tǒng),所以只能通過文本這樣的方式來交換信息。
所以要echo一段文本給客戶端,更簡單的方式來理解就是 return是指返回值不產(chǎn)生輸出,而echo不是可以直接輸出在頁面上。Ajax請求就可以理解為在訪問一個頁面一樣只有輸出了才看得見信息,不然是看不到信息的,而return只在服務(wù)器內(nèi)部傳輸,看不見所以頁面上沒有返回信息也就是獲取不到。
所以在寫PHP的API接口時候,記得返回數(shù)據(jù)使用echo而不要在使用return 了,不然是獲取不到數(shù)據(jù)的