首页 > 解决方案 > 如何正确调用基类构造函数

问题描述

基类:

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。如果我只是从基类构造函数的大括号中复制数据,它也会给出各种错误。在这种情况下,如何正确调用我的基类构造函数?

标签: phpconstructor

解决方案


您必须使用参数调用父构造函数,因为它已在抽象类中声明。

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

顺便说一句,考虑将“FeedbackProvider”作为独立服务,并通过构造函数或方法注入(而不是通过 setter)将此服务注入另一个服务。


推荐阅读