如何正确调用基类构造函数

时间:2019-03-17 10:11:14

标签: php constructor

基类:

abstract class AbstractHandler {
    use FeedbackTrait;

    /** @var EntityManager */
    private $entityManager;
    /** @var SessionInterface */
    private $session;

    /**
     * Constructor.
     *
     * @param EntityManager    $entityManager
     * @param SessionInterface $session
     */
    public function __construct(
        EntityManager $entityManager,
        SessionInterface $session
    ) {
        $this->entityManager = $entityManager;
        $this->session = $session;
    }

    /**
     * @return EntityManager
     */
    protected function getEntityManager() {
        return $this->entityManager;
    }

    /**
     * @return FlashBagInterface
     */
    protected function getFeedback() {
        /** @var FlashBagInterface $feedback */
        $feedback = $this->session->getBag('boltforms');

        return $feedback;
    }
}

然后,在成员类中,我有自己的构造函数。但是我不知道如何正确地调用基类构造函数。

class bigbrotherHandler extends AbstractHandler {
    //custom class vars

    public function __construct() {
        parent::__construct();
        //custom declarations
    }
}

PhpStorm说Required parameter $entityManager missing。但是我如何在这里提到这个参数?如果我选择parent::__construct($entityManager);,它会显示Undefined variable $entityManager。如果我只是从基类构造函数中的括号中复制数据,它还会给出各种错误。在这种情况下,如何正确调用我的基类构造函数?

1 个答案:

答案 0 :(得分:0)

您必须使用在抽象类中声明的参数来调用父构造函数。

class bigbrotherHandler extends AbstractHandler {
    public function __construct(EntityManager $entityManager,SessionInterface $session) {
         parent::__construct($entityManager, $session);
         //custom declarations
     }
 }

BTW考虑将“ FeedbackProvider”作为独立服务,然后通过构造函数或方法注入(而不是通过setter)将该服务注入另一个服务。