Skip to content

Commit 07076d6

Browse files
janedbalstaabm
authored andcommitted
Account for non-final classes: child can override property visibility
For non-final classes, a child class can widen visibility: - protected: type is preserved (invariant in PHP), treat as maybe - private: child can redeclare with any type, treat as mixed For final classes, non-accessible properties return empty array. Add implicit final test for new expression (asFinal via NewHandler).
1 parent 465af39 commit 07076d6

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

tests/PHPStan/Analyser/nsrt/array-column-php82.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,19 @@ public function testNonPublicAsIndex(array $objects): void
301301

302302
}
303303

304+
class ArrayColumnVisibilityImplicitFinalTest
305+
{
306+
307+
public function testNewExpression(): void
308+
{
309+
$objects = [new NonFinalObjectWithVisibility()];
310+
assertType('array{int}', array_column($objects, 'pub'));
311+
assertType('array{}', array_column($objects, 'prot'));
312+
assertType('array{}', array_column($objects, 'priv'));
313+
}
314+
315+
}
316+
304317
class ArrayColumnVisibilityFromInsideTest
305318
{
306319

0 commit comments

Comments
 (0)