Есть набор доктриновских сущностей entities и есть код, который должен с этими сущностями, что-то делать.
Т.к. сущностей и способов использования сущностей будет много, то хочу в абстрактных классах обозначить базовые методы.
<?php
namespace App\Entity;
abstract class AbstractEntity;
{
//...
}
<?php
namespace App\AnotherName;
use App\Entity\AbstractEntity;
abstract class AbstractService
{
abstract public function create(AbstractEntity $entity);
}
<?php
namespace App\Entity;
class AnotherEntity extend AbstractEntity;
{
//...
}
Шторм начал ругаться на нижеследующий код - объявление метода должно совпадать с тем, что есть в абстрактном классе.
<?php
namespace App\Service\AnotherName;
use App\Entity\AnotherEntity;
class FooService extend AbstractService
{
public function create(AnotherEntity $anotherEntity) {
//...
}
}
А вот на такой код, не ругается:
<?php
namespace App\Service\AnotherName;
use App\Entity\AbstractEntity;
class FooService extend AbstractService
{
public function create(AbstractEntity $anotherEntity) {
//...
}
}
И так как пока пхпшторм в плане пхпшного ооп понимает больше чем я, то возник вопрос -
я правильно понимаю, что для того, чтобы метод create в классах сервисов отнаследованных от AbstractService работал с любыми сущностями отнаследованными от AbstractEntity нужно оставить на входе метода create дочерних классов AbstractService тип параметра AbstractEntity?