這真的取決於你的實現。有些遵循架構,每個函數都會以數組的形式返回數據。即使對於查詢返回的數據也是以小塊數組的形式返回的。這完全取決於你如何優化或編寫你的腳本。假設你正在獲取所有聯繫人,並且如果你在數據庫中說了10,000個聯繫人,並且你將所有聯繫人都返回給了一個數組,那麼這是一個壞主意如果你希望函數以數組的形式返回數據,那麼使用分頁和小數字返回。
我有這個問題,我們有一個用PHP/Mysql編寫的大型Web應用程序。在這段時間裏,我們擁有數千個不同班級的職能。現在我們必須開發一個具有不同功能的REST API。主要的問題是我們沒有使用不同的函數來返回查詢對象,有的返回數組,有的返回布爾值等等。該API應該將數據作爲JSON返回。現在我們必須選擇使用現有的代碼來實現不同的功能,或者重新編寫API的新代碼。第二種選擇更昂貴,所以我們留下第一選擇。但是我提到的問題遠不止於方法會返回不同的類型,而且我們是否需要真正編寫更多的代碼來檢查哪個函數被調用,以及如果調用say函數「xyz()」,並且我們知道它返回的查詢對象然後通過它循環生成數組,然後json。這不是一個壞主意,而且會花費很多精力,然後更好地編寫單獨的代碼。
所以我們遵循以下的方法。
我們的API調用看起來像
www.api.oursite.com/api/v1/Resource/Method?param = ....
現在我們捕獲資源和方法,其中resource是類名,Method是該類的方法名。
,所以我們知道我們必須調用資源 - >()方法
現在我們所謂ResourceMethodMap.class.php的一類,它包含數組作爲
static $resource_method_map = array(
"Users"=>array(
"getUserInfo"=> // gets the user info
array(
"return"=>"array",
"accessToken"=>true
)
),
....
...
)
所以API請求處理代碼就像
public function call_method($resource = "",$method=""){
if($resource == "") $resource = $this->get_resource();
if($method == "") $method = $this->get_api_method();
if (class_exists($resource)) {
$resource_obj = new $resource();
// Parse the method params as array
$param_array = $this->parse_method_params($resource,$method);
if(false !== $param_array){
$result = call_user_func_array(array($resource_obj, $method), $param_array);
}else{
$result = $resource_obj->$method() ;
}
return $this->process_return_data($resource,$method,$result,$resource_obj);
}else{
$this->setMessage("Invalid Resource");
return false ;
}
}
這裏的功能process_return_data()會做返回的數據轉換爲
功能process_return_data($資源,$方法,$ RET_VAL,$ resource_obj = NULL){ 如果(array_key_exists( 「迴歸」,ResourceMethodMap: :$ resource_method_map [$ resource] [$ method])){ $ return_type = ResourceMethodMap :: $ resource_method_map [$ resource] [$ method] [「return」]; $ return_array = array(); switch($ return_type){ case'boolean': if(false === $ ret_val){ return false;如果(is_array($ ret_val)){ }返回$ ret_val;否則{ 如果(is_array($ ret_val)){ 返回$ ret_val; } elseif(true === $ ret_val){ return $ ret_val; } else { $ return_array [] = $ ret_val; return $ return_array;
} } break; case'array': return $ ret_val; 休息; } ..... }}
所以,是的,它完全在開發商,他們要如何返回他們的數據。上面的例子只是我們實現的一個實時場景。
我已經發布了完整的代碼她http://codepad.org/MPY1gVed有看
不知道如果我挺按照你的問題,但 - 樣JS-所有函數/方法隱含如果沒有'return'語句找到返回。在JS中,這是'undefined',在PHP中,'null'被返回。所以只需'return $ result'就可以了。另外:'$ classname - > $ methodname()'?我希望你傳遞一個實例,而不是'$ className'的字符串,否則你的代碼肯定會失敗。 –
是的,你是對的。謝謝。 – RaviRokkam