2013-07-25 19 views
36

Tôi đang sử dụng Laravel. Dưới đây là một lớp học tôi đang làm việc trên:Gọi chức năng khác trong cùng một bộ điều khiển?

<?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; 
} 

} 

Dòng:

return sendRequest($uri); 

ám chỉ rằng lỗi: Gọi đến chức năng xác định sendRequest()

Tôi giả định đó là vì tôi đề cập đến chức năng theo cách sai, nhưng tôi không thể tìm thấy bất kỳ lời giải thích nào về cách thực hiện nó.

+0

Bạn có thể muốn bảo vệ sendRequest. –

Trả lời

77

Hãy thử:

return $this->sendRequest($uri); 

Kể từ PHP không phải là một ngôn ngữ Object-Orieneted tinh khiết, nó diễn giải sendRequest() như một nỗ lực để gọi một chức năng được xác định trên toàn cầu (giống như nl2br() chẳng hạn), nhưng vì chức năng của bạn là một phần của một lớp học ('InstagramController'), bạn cần sử dụng $this để trỏ thông dịch viên đi đúng hướng.

+0

@KristofferNolgren Tôi đề nghị bạn đọc thêm về OOP. $ this đề cập đến đối tượng InstagramController hiện tại, có phương thức sendRequest() trên đó. –

+0

Becous 'sendRequest()' là một hàm bên trong lớp. Đó là sử dụng cơ bản trong PHP. Đọc thêm về 'lớp'. –

+7

PHP diễn giải 'sendRequest' như một nỗ lực để gọi một hàm được định nghĩa toàn cục (giống như' nl2br() 'chẳng hạn), nhưng vì bạn đã định nghĩa' hàm' bên trong 'lớp' ('InstagramController'), bạn cần sử dụng '$ this' để trỏ thông dịch viên đi đúng hướng. – haim770