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

Try:

return $this->sendRequest($uri); 

Поскольку PHP не является чисто объектно-Orieneted язык, он интерпретирует sendRequest() как попытка вызвать глобально определенную функцию (так же, как nl2br(), например), но так как ваша функция является частью класса («InstagramController»), вы должны использовать $this, чтобы указать интерпретатору в правильном направлении.

+0

@ KristofferNolgren Предлагаю вам больше узнать о ООП. $ this относится к текущему объекту InstagramController, который имеет на нем метод sendRequest(). –

+0

Becous 'sendRequest()' является функцией внутри класса. Это основное использование в PHP. Подробнее о 'class'. –

+7

PHP интерпретирует 'sendRequest' как попытку вызвать глобально определенную функцию (например, как' nl2br() '), но так как вы определили свою' функцию' внутри 'класса' ('InstagramController'), вам нужно используйте '$ this', чтобы указать интерпретатору в правильном направлении. – haim770

2

Да. Проблема в неправильной нотации. Использование:

$this->sendRequest($uri) 

Вместо этого. Или

self::staticMethod() 

для статических методов. Также прочитайте это, чтобы получить представление о ООП. http://www.php.net/manual/en/language.oop5.basic.php

Смежные вопросы