public static function dataProvider(): Generator
{
yield ['15', [new Token(15, Lexer::T_INTEGER, 0)];
//And so on...
}
Я хотел бы «набрать» этого провайдера. Как предложено в этом ответе, я попробовал:
/**
* @return Generator
*/
Но PhpStan возвращает ошибку:
Generator expects value type
array{string, array},
array{'15', array{Doctrine\Common\Lexer\Token} } given.
does not accept type array{Doctrine\Common\Lexer\Token}:
Template type V on class Doctrine\Common\Lexer\Token is not
covariant. Learn more:
https://phpstan.org/blog/whats-up-with- ... -covariant
Я прочитал упомянутую ссылку и эту «Тибобезопасные итераторы и генераторы», но до сих пор не понимаю, как правильно обеспечить типобезопасность этого генератора.
Я знаю, что ошибка исчезает, когда я использую @return Generator, но мне нужно указать типы в Token. FI, ошибки заменяются
Method LongitudeOne\Geo\String\Tests\LexerTest::dataProvider() тип возвращаемого значения с универсальным классом Doctrine\Common\Lexer \Token не указывает его типы: T, V
Если это может помочь, класс Token объявлен в Doction/lexer:
/**
* @template T of UnitEnum|string|int
* @template V of string|int
* @implements ArrayAccess
*/
final class Token implements ArrayAccess
Источник: https://stackoverflow.com/questions/781 ... -generator
Мобильная версия