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

PHP从另一个命名空间调用抽象类方法,php,class,methods,abstract,Php,Class,Methods,Abstract,我有一个类OnboardingConversation,在这里我从名称空间BotMan\BotMan\Messages\Conversations\Conversations调用方法say namespace PanObed\Conversations; use BotMan\BotMan\Messages\Conversations\Conversation; class OnboardingConversation extends Conversation{ protecte

我有一个类OnboardingConversation,在这里我从名称空间BotMan\BotMan\Messages\Conversations\Conversations调用方法say

namespace PanObed\Conversations;
use BotMan\BotMan\Messages\Conversations\Conversation;

class OnboardingConversation extends Conversation{

      protected $name;
 
        public function __construct() {

        return $this->run();

        }

      public function run() {

        $this->say("Say hello");

      }
}
namespace BotMan\BotMan\Messages\Conversations;

use BotMan\BotMan\BotMan;
use BotMan\BotMan\Interfaces\ShouldQueue;
use BotMan\BotMan\Messages\Attachments\Audio;
use BotMan\BotMan\Messages\Attachments\Contact;
use BotMan\BotMan\Messages\Attachments\File;
use BotMan\BotMan\Messages\Attachments\Image;
use BotMan\BotMan\Messages\Attachments\Location;
use BotMan\BotMan\Messages\Attachments\Video;
use BotMan\BotMan\Messages\Incoming\IncomingMessage;
use BotMan\BotMan\Messages\Outgoing\Question;
use Closure;
use Illuminate\Support\Collection;
use Spatie\Macroable\Macroable;

abstract class Conversation
{

     use Macroable;

    /**
     * @var BotMan
     */
    protected $bot;

    public function say($message, $additionalParameters = [])
    {
        $this->bot->reply($message, $additionalParameters);

        return $this;
    }
}
还有classBotMan\BotMan\Messages\Conversations\Conversation

namespace PanObed\Conversations;
use BotMan\BotMan\Messages\Conversations\Conversation;

class OnboardingConversation extends Conversation{

      protected $name;
 
        public function __construct() {

        return $this->run();

        }

      public function run() {

        $this->say("Say hello");

      }
}
namespace BotMan\BotMan\Messages\Conversations;

use BotMan\BotMan\BotMan;
use BotMan\BotMan\Interfaces\ShouldQueue;
use BotMan\BotMan\Messages\Attachments\Audio;
use BotMan\BotMan\Messages\Attachments\Contact;
use BotMan\BotMan\Messages\Attachments\File;
use BotMan\BotMan\Messages\Attachments\Image;
use BotMan\BotMan\Messages\Attachments\Location;
use BotMan\BotMan\Messages\Attachments\Video;
use BotMan\BotMan\Messages\Incoming\IncomingMessage;
use BotMan\BotMan\Messages\Outgoing\Question;
use Closure;
use Illuminate\Support\Collection;
use Spatie\Macroable\Macroable;

abstract class Conversation
{

     use Macroable;

    /**
     * @var BotMan
     */
    protected $bot;

    public function say($message, $additionalParameters = [])
    {
        $this->bot->reply($message, $additionalParameters);

        return $this;
    }
}
但是有一个问题,当我调用新的OnboardingConversation时,我有一个错误:

<br />
<b>Fatal error</b>:  Uncaught Error: Call to a member function reply() on null in C:\xampp\htdocs\panobed\bot\vendor\botman\botman\src\Messages\Conversations\Conversation.php:205
Stack trace:
#0 C:\xampp\htdocs\panobed\bot\class\Conversations\OnboardingConversation.php(32): BotMan\BotMan\Messages\Conversations\Conversation-&gt;say('Test')
#1 C:\xampp\htdocs\panobed\bot\class\Conversations\OnboardingConversation.php(23): PanObed\Conversations\OnboardingConversation-&gt;run()
#2 C:\xampp\htdocs\panobed\bot\index.php(27): PanObed\Conversations\OnboardingConversation-&gt;__construct()
#3 [internal function]: {closure}(Object(BotMan\BotMan\BotMan))
#4 C:\xampp\htdocs\panobed\bot\vendor\botman\botman\src\BotMan.php(495): call_user_func_array(Object(Closure), Array)
#5 C:\xampp\htdocs\panobed\bot\vendor\botman\botman\src\BotMan.php(425): BotMan\BotMan\BotMan-&gt;callMatchingMessages()
#6 C:\xampp\htdocs\panobed\bot\index.php(32): BotMan\BotMan\BotMan-&gt;listen()
#7 {main}
  thrown in <b>C:\xampp\htdocs\panobed\bot\vendor\botman\botman\src\Messages\Conversations\Conversation.php</b> on line <b>205</b><br />

致命错误:未捕获错误:在C:\xampp\htdocs\panobed\bot\vendor\botman\botman\src\Messages\Conversations\Conversation.php:205中调用null上的成员函数reply() 堆栈跟踪: #0 C:\xampp\htdocs\panobed\bot\class\Conversations\OnboardingConversation.php(32):BotMan\BotMan\Messages\Conversations\Conversations say('Test')) #1c:\xampp\htdocs\panobed\bot\class\Conversations\OnboardingConversation.php(23):panobed\Conversations\OnboardingConversation-run() #2 C:\xampp\htdocs\panobed\bot\index.php(27):panobed\Conversations\OnboardingConversation-\uuu构造() #3[内部函数]:{closure}(对象(BotMan\BotMan\BotMan)) #4 C:\xampp\htdocs\panobed\bot\vendor\botman\src\botman.php(495):调用用户函数数组(对象(闭包),数组) #5 C:\xampp\htdocs\panobed\bot\vendor\botman\src\botman.php(425):botman\botman\botman-callMatchingMessages() #6 C:\xampp\htdocs\panobed\bot\index.php(32):BotMan\BotMan\BotMan-listen() #7{main} 在第205行的C:\xampp\htdocs\panobed\bot\vendor\botman\botman\src\Messages\Conversations\Conversation.php中抛出
如果我不使用namespacePanObed\Conversations,代码就可以了。你能告诉我,我做错了什么吗


Thx

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

您应该在
OnboardingConversation::\u构造函数中初始化它。
使用正确的对象初始化
$this->bot
后,您的代码应该能够调用
$this->bot->reply(…)