在同一个控制器中调用其他函数?


73

我有这个控制器,并且function read($q)返回错误Call to undefined function sendRequest()

<?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('/', 'HomeController@showWelcome');
|
*/

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

}

我假设这是因为我以错误的方式引用了该函数,但是我找不到有关如何执行此操作的任何解释。


您可能想使sendRequest受保护。
Alexander Cogneau

Answers:


156

尝试:

return $this->sendRequest($uri);

由于PHP不是一种纯粹的Object-Orieneted语言,因此它被解释sendRequest()为尝试调用全局定义的函数(nl2br()例如,与之类似),但是由于您的函数是类(“ InstagramController”)的一部分,因此您需要使用$this指向正确方向的口译员。


@KristofferNolgren我建议您阅读有关OOP的更多信息。$ this指向当前的InstagramController对象,该对象上具有sendRequest()方法。
Blue Genie

BecoussendRequest()是类内部的函数。它是PHP的基本用法。了解更多有关class
Maciej A. Czyzewski 2013年

7
PHP解释sendRequest为尝试调用全局定义的函数(nl2br()例如,与之类似),但是由于您functionclass('InstagramController')内部定义了,因此您需要使用$this指向正确方向的解释器。
haim770

PHP与C或Java不同,PHP和C或Java都是您的原始文章。我认为您假设它的工作原理相同,因为语言/语法在许多其他方面看起来很相似。
user985366

工作得很好!但是,如何连接两个函数的输出?我试图从显示的内容getTitle,并getContent以下列方式:return $this->getTitle() . $this->getContent()叫另一个函数内部getContent()它给我的错误。
Subrata Sarkar

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.