2013-07-25 17 views
36

我正在使用Laravel。這是一類我工作:在同一個控制器中調用其他函數?

<?php 

class InstagramController extends BaseController { 

/* 
|-------------------------------------------------------------------------- 
| Default Home Controller 
|-------------------------------------------------------------------------- 
| 
| You may wish to use controllers instead of, or in addition to, Closure 
| based routes. That's great! Here is an example controller method to 
| get you started. To route to this controller, just add the route: 
| 
| Route::get('/', '[email protected]'); 
| 
*/ 

public function read($q) 
{ 
    $client_id = 'ea7bee895ef34ed08eacad639f515897'; 

    $uri = 'https://api.instagram.com/v1/tags/'.$q.'/media/recent?client_id='.$client_id; 
    return sendRequest($uri); 
} 

public function sendRequest($uri){ 
    $curl = curl_init($uri); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
    $response = curl_exec($curl); 
    curl_close($curl); 
    return $response; 
} 

} 

行:

return sendRequest($uri); 

渲染錯誤: 調用未定義的函數sendRequest將()

我猜想這是因爲我以錯誤的方式引用函數,但我找不到解釋如何執行它的方法。

+0

您可能想要使sendRequest受保護。 –

回答

77

嘗試:

return $this->sendRequest($uri); 

由於PHP是不是一個純粹的對象Orieneted語言,它解釋sendRequest()作爲一種嘗試調用全局定義的函數(就像nl2br()爲例),但因爲你的函數是部分('InstagramController'),您需要使用$this來將解釋器指向正確的方向。

+0

@KristofferNolgren我建議你閱讀關於OOP的更多內容。 $ this指的是當前的InstagramController對象,它具有sendRequest()方法。 –

+0

be's sendRequest()'是類中的一個函數。這是PHP中的基本用法。閱讀更多關於'class'的信息。 –

+7

PHP將'sendRequest'解釋爲嘗試調用全局定義的函數(就像'nl2br()'),但是由於您在'class'('InstagramController')中定義了'function',所以您需要使用'$ this'將解釋器指向正確的方向。 – haim770

相關問題