Встроенные подсказки типа PHP при вызове функции
Можно ли ввести подсказку параметра непосредственно в строке во время вызова функции?
public function load(ObjectManager $manager)
{
$product = $this->createProduct(
"T-SHIRT",
$this->getReference('brand-4') /** @var Brand <=== NOT WORKING */
);
$manager->persist($product);
$this->addReference('product-1', $product);
}
/**
* @param string $name
* @param Brand $brand
*/
private function createProduct($name, $brand)
{
$product = new Product();
$product
->setName($name)
->setBrand($brand) // <== this setter needs a Brand entity
;
// [...]
}
Конечно, phpstan выдает ошибку, потому что getReference
возвращает объект, а функция ожидает объект Brand:
Parameter #2 $brand of method AppBundle\DataFixtures\ORM\ProductFixtures::createProduct() expects AppBundle\Entity\Brand, object given.
Я НЕ хотел бы явно объявлять такую переменную:
/** @var Brand */
$brand = $this->getReference('brand-4');
$product = $this->createProduct(
"T-SHIRT",
$brand
);
Это сэкономило бы мне много времени!
1 ответ
У меня была такая же проблема с реализацией такой же общей структуры. Это решение работает, когда вы хотите переопределить подпись метода. Вы можете сделать это, используя
@method
doc комментарии, но для этого вам нужно 2 класса:
class AbstractRepository {
/**
* @param mixed $id
* @return object
*/
public function getReference($id) {
/* ... */
}
}
/**
* @method ConcreteResult getReference($id)
*/
class ConcreteRepository extends AbstractRepository {
}
$repo = new ConcreteRepository();
$repo->getReference(123); // Has ConcreteResult return type
Например, это работает в PHPStorm. Я не проверял, работает ли он с PHPStan.