php BotMan对话的ask方法的回调函数中对$this的引用不正确

izkcnapc  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(102)

我正在使用PHP中的BotMan框架来创建一个聊天机器人,我遇到了一个问题,在与BotMan的Conversation类的ask方法一起使用的回调函数中,对$this的引用不正确。
我创建了一个DepositConversation类,它扩展了Conversation类,并且我定义了两个方法askAmount()askPaymentMethod(),用来向用户提问。然而,当我在回调函数中调用$this时,这是ask方法的第二个参数,$this引用是不正确的,引用的是BotMan\BotMan\Messages\Conversation\InlineConversation而不是DepositConversation
下面是我的代码摘录:

use BotMan\BotMan\BotMan;
use BotMan\BotMan\Messages\Conversations\Conversation;

class DepositConversation extends Conversation
{
    // ...

    public function askAmount()
    {
        $this->ask('What is the amount you want to deposit?', function($answer) {
            // $this refers to BotMan\BotMan\Messages\Conversation\InlineConversation
            // instead of DepositConversation
            $this->amount = $answer->getText();
            
            // ...
        });
    }

    // ...
}

我希望$this引用DepositConversation的示例,以便可以访问类属性并执行其他操作。然而,它似乎并不像预期的那样工作。
有没有人遇到过这个问题,或者知道如何在BotMan Conversation的ask方法的回调函数中解决这个错误的$this引用错误?提前感谢您的帮助!

xqk2d5yq

xqk2d5yq1#

可能ask方法的Closure函数通过使用\Closure:bind绑定到另一个$this
在这些用例中有一个简单的技巧,使用$that$self

public function askAmount()
{   
    $that = $this;   // or $self = $this;
    $this->ask('What is the amount you want to deposit?', function($answer) use ($that) {
        $that->amount = $answer->getText();
        // ...
    });
}

相关问题