PHP 如何把一个类的方法,当能一个闭包传入其它方法

class HomeController extends BaseController
{
    public function home(Request $request)
    {
        /* 这个是原来的写法
        return $this->redirectToProvider($request, function () {
            return $this->getView();
        });
        */
        //好像不可以写成这样的?
        return $this->redirectToProvider($request, $this->getView);
    }

    private function getView()
    {
        return view('xyb.home', ['name' => '这是路由器里定义的变量']);
        //return view('child', ['name' => '这是路由器里定义的变量']);
    }
}

getView 是类 HomeController 的一个方法,我想把它当成一个变量传给方法 redirectToProvider。
网上查了也没查到,哪位大侠指导一下

一亩三分地儿
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 10
ruke

借助call_user_func或者call_user_func_array可以实现
需要作用在redirectToProvider方法

5年前 评论
Oraoto

[$this, 'getView']

<?php

class Test
{
    public function home($request)
    {
        return $this->redirectToProvider($request, [$this, 'getView']);
    }

    private function getView()
    {
        return "view";
    }

    private function redirectToProvider($request, $callback)
    {
        return $callback();
    }
}

echo (new Test)->home("req") . PHP_EOL;
5年前 评论
一亩三分地儿

@Oraoto 修改后不管用,PHP 把 getView 看成类的静态方法了。

file

没有现成的算了,就用原来的匿名方法吧。只是感觉这个应该有。C# 会把实例的方法当变量传

5年前 评论
ruke

@Oraoto

<?php

class Test
{
    public function home($request)
    {
        return $this->redirectToProvider($request, [$this, 'getView']);
    }

    private function getView()
    {
        return "view";
    }

    private function redirectToProvider($request, $callback)
    {
        return call_user_func($callback);
    }
}

echo (new Test)->home("req") . PHP_EOL;

这不就行吗..我们自己写异步消费的时候都这样来写
我觉得没这个必要吧, 还不如直接写匿名函数呢

5年前 评论
Oraoto

@ruke call_user_func($callback)$callback()的区别是?

5年前 评论
Oraoto

@ruke 我知道能用call_user_func,我想问一下call_user_func($callback)$callback()的区别是什么?你发的代码和我发的代码,区别只有这一点。

5年前 评论
Oraoto

@ruke

你的代码:https://3v4l.org/tvc02#output
我的代码:https://3v4l.org/HJd9E#output

结果是一样的,所以不知道你想表达什么?或者两者有什么区别?

5年前 评论
ruke

@Oraoto 不知道,只是在你的方法失效后,我这么写

5年前 评论
ruke

@Oraoto 我想表达xxx, 这么xxx干嘛?xx?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!