diff --git a/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyArrayTypeCorrector.php b/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyArrayTypeCorrector.php index 4c7b0bb32bc..d3fcd962cc8 100644 --- a/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyArrayTypeCorrector.php +++ b/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyArrayTypeCorrector.php @@ -8,6 +8,7 @@ use PHPStan\Type\ArrayType; use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; +use PHPStan\Type\StringType; use PHPStan\Type\Type; final class AccessoryNonEmptyArrayTypeCorrector @@ -26,6 +27,12 @@ public function correct(Type $mainType): Type if ($type instanceof NonEmptyArrayType) { return new ArrayType(new MixedType(), new MixedType()); } + + if ($type instanceof ArrayType + && $type->getIterableValueType() instanceof IntersectionType + && $type->getIterableValueType()->isString()->yes()) { + return new ArrayType(new MixedType(), new StringType()); + } } return $mainType; diff --git a/src/NodeTypeResolver/NodeTypeResolver.php b/src/NodeTypeResolver/NodeTypeResolver.php index 9baa9932767..6cde992ec83 100644 --- a/src/NodeTypeResolver/NodeTypeResolver.php +++ b/src/NodeTypeResolver/NodeTypeResolver.php @@ -34,13 +34,11 @@ use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\ErrorType; -use PHPStan\Type\IntegerType; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; use PHPStan\Type\NullType; use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectWithoutClassType; -use PHPStan\Type\StringType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; @@ -180,11 +178,6 @@ public function getType(Node $node): Type } } - // correction for explode() that always returns array - if ($node instanceof FuncCall && $node->name instanceof Name && $node->name->toString() === 'explode') { - return new ArrayType(new IntegerType(), new StringType()); - } - if ($node instanceof Ternary) { $ternaryType = $this->resolveTernaryType($node); if (! $ternaryType instanceof MixedType) {