我正在使用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
引用错误?提前感谢您的帮助!
1条答案
按热度按时间xqk2d5yq1#
可能
ask
方法的Closure
函数通过使用\Closure:bind
绑定到另一个$this
。在这些用例中有一个简单的技巧,使用
$that
或$self
。