Я только начинаю поиграться с phpstorm.meta.php, пытаясь улучшить подсказки кода. Документация, которую я нашел до сих пор, кажется немного тонкой, и я не смог заставить ее работать. Я использую PhpStorm 2019.1 и ниже это то, что я имею до сих пор. Нужно ли выполнять очистку кеша и перезапускать или должен работать хинтинг, как только я редактирую метафайл?
BasePB.php:
// sub-classes override this method to return the class name of entity they use
abstract protected function getEntityType()
private function entityFactory($type) : ModelEntity
{
return new $type($this, false);
}
public function getNewEntity($options = array())
{
$entityType = $this->getEntityType();
$res = $this->entityFactory($entityType);
$res->inject($options);
return $res;
}
.phpstorm.meta.php
<?php
namespace PHPSTORM_META
{
override(\LTEObjects\Base\BasePB::entityFactory(0), map(['' => '@']));
}
Какой-то другой файл в классе, который расширяет BasePB
protected function getEntityType()
{
return '\Application\Model\SomeEntity'; //extends ModelEntity
}
public function someMethod(...)
{
// ...
$entity = $this->getNewEntity(array(...));
//PhpStorm recognizes $entity as a 'ModelEntity', not a 'SomeEntity'
// ...
}
Файл метаданных находится в том же модуле, что и файл кода, а не в корне моего проекта, но даже когда я перемещаю его в корень, он не работает, и из того, что я прочитал, он должен иметь возможность храниться где угодно и все еще работать.
Проблема в том, что используемая строка слишком далека от метода, превращающего ее в класс?