2013-07-25 50 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

相关问题