PHP从另一个命名空间调用抽象类方法



我有一个类OnboardingConversation,其中我从命名空间BotMan\BotMan\Messages\Conversations\Conversation调用方法say

namespace PanObedConversations;
use BotManBotManMessagesConversationsConversation;
class OnboardingConversation extends Conversation{
protected $name;

public function __construct() {
return $this->run();
}
public function run() {
$this->say("Say hello");
}
}

并且存在类BotMan\BotMan\Messages\Conversations\Conversation

namespace BotManBotManMessagesConversations;
use BotManBotManBotMan;
use BotManBotManInterfacesShouldQueue;
use BotManBotManMessagesAttachmentsAudio;
use BotManBotManMessagesAttachmentsContact;
use BotManBotManMessagesAttachmentsFile;
use BotManBotManMessagesAttachmentsImage;
use BotManBotManMessagesAttachmentsLocation;
use BotManBotManMessagesAttachmentsVideo;
use BotManBotManMessagesIncomingIncomingMessage;
use BotManBotManMessagesOutgoingQuestion;
use Closure;
use IlluminateSupportCollection;
use SpatieMacroableMacroable;
abstract class Conversation
{
use Macroable;
/**
* @var BotMan
*/
protected $bot;
public function say($message, $additionalParameters = [])
{
$this->bot->reply($message, $additionalParameters);
return $this;
}
}

但有一个问题,当我调用new OnboardingConversation时,我会出现以下错误:

<br />
<b>Fatal error</b>:  Uncaught Error: Call to a member function reply() on null in C:xampphtdocspanobedbotvendorbotmanbotmansrcMessagesConversationsConversation.php:205
Stack trace:
#0 C:xampphtdocspanobedbotclassConversationsOnboardingConversation.php(32): BotManBotManMessagesConversationsConversation-&gt;say('Test')
#1 C:xampphtdocspanobedbotclassConversationsOnboardingConversation.php(23): PanObedConversationsOnboardingConversation-&gt;run()
#2 C:xampphtdocspanobedbotindex.php(27): PanObedConversationsOnboardingConversation-&gt;__construct()
#3 [internal function]: {closure}(Object(BotManBotManBotMan))
#4 C:xampphtdocspanobedbotvendorbotmanbotmansrcBotMan.php(495): call_user_func_array(Object(Closure), Array)
#5 C:xampphtdocspanobedbotvendorbotmanbotmansrcBotMan.php(425): BotManBotManBotMan-&gt;callMatchingMessages()
#6 C:xampphtdocspanobedbotindex.php(32): BotManBotManBotMan-&gt;listen()
#7 {main}
thrown in <b>C:xampphtdocspanobedbotvendorbotmanbotmansrcMessagesConversationsConversation.php</b> on line <b>205</b><br />

如果我不使用命名空间PanObed\Conversations,代码就可以了。所以你能告诉我,我做错了什么吗?

Thx

您似乎没有在任何地方设置$this->bot属性。

您应该在OnboardingConversation::__constructor中初始化它。在用正确的对象初始化$this->bot之后,您的代码应该能够调用$this->bot->reply(...)

最新更新