【问题标题】:Calling other function in the same controller?在同一个控制器中调用其他函数?
【发布时间】:2013-07-25 13:06:49
【问题描述】:

我有这个控制器,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 受到保护。
  • 如果您在 php 中调用成员 var,您可以使用 $this-> 来执行此操作。在你的函数读取中,你调用函数 sendRequest 而不使用 $this。试试:return $this->sendRequest($url);

标签: php laravel


【解决方案1】:

试试:

return $this->sendRequest($uri);

由于 PHP 不是纯面向对象的语言,它会将 sendRequest() 解释为尝试调用全局定义的函数(就像 nl2br() 一样),但由于您的函数是类的一部分('InstagramController '),您需要使用$this 将解释器指向正确的方向。

【讨论】:

  • @KristofferNolgren 我建议您阅读有关 OOP 的更多信息。 $this 指的是当前 InstagramController 对象,它上面有 sendRequest() 方法。
  • 因为sendRequest() 是类内部的一个函数。它是 PHP 中的基本用法。阅读有关class 的更多信息。
  • PHP 将 sendRequest 解释为尝试调用全局定义的函数(就像 nl2br() 一样),但是由于您在 class 内定义了 function('InstagramController' ),您需要使用$this 将解释器指向正确的方向。
  • PHP 与 C 或 Java 不同,您可以将其作为您的原始帖子。我认为您假设它的工作原理相同,因为语言/语法在许多其他方面看起来相似。
  • 工作得很好!但是如何连接两个函数的输出?我试图通过以下方式显示来自getTitlegetContent 的内容:return $this-&gt;getTitle() . $this-&gt;getContent() 在另一个名为getContent() 的函数中,这给了我错误。
【解决方案2】:

是的。问题是符号错误。使用:

$this->sendRequest($uri)

相反。或者

self::staticMethod()

用于静态方法。另请阅读此文章以了解 OOP - http://www.php.net/manual/en/language.oop5.basic.php

【讨论】:

    【解决方案3】:

    要在任何 laravel 版本中调用同一控制器内的函数,如下所示

    $role = $this->sendRequest('parameter');
    // sendRequest is a public function
    

    【讨论】:

    • 您有什么新内容要添加吗?还有两个其他答案,都是几年前的,给出了相同的建议
    【解决方案4】:

    您可以使用$this-&gt;methodNameYouWantToCall($thing_you_want_to_pass) 调用该方法。

    在你的情况下,你可以这样......

    return $this->sendRequest($uri);
    

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 2020-03-05
      • 2019-02-07
      • 2016-02-16
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多