Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bd5720a

Browse files
committed
fix
1 parent 3c4d820 commit bd5720a

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

‎src/Analyser/MutatingScope.php‎

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3764,22 +3764,34 @@ private function enterAnonymousFunctionWithoutReflection(
37643764

37653765
if (
37663766
!$expr instanceof PropertyFetch
3767-
|| !$expr->name instanceof Node\Identifier
3768-
|| !$expr->var instanceof Variable
3769-
|| !is_string($expr->var->name)
3770-
|| $expr->var->name !== 'this'
37713767
) {
37723768
continue;
37733769
}
37743770

3775-
$propertyReflection = $this->propertyReflectionFinder->findPropertyReflectionFromNode($expr, $this);
3776-
if ($propertyReflection === null) {
3777-
continue;
3778-
}
3771+
while ($expr instanceof PropertyFetch) {
3772+
if ($expr->var instanceof Variable) {
3773+
if (
3774+
! $expr->name instanceof Node\Identifier
3775+
|| !is_string($expr->var->name)
3776+
|| $expr->var->name !== 'this'
3777+
) {
3778+
continue 2;
3779+
}
3780+
} elseif (!$expr->var instanceof PropertyFetch) {
3781+
continue 2;
3782+
}
37793783

3780-
$nativePropertyReflection = $propertyReflection->getNativeReflection();
3781-
if ($nativePropertyReflection === null || !$nativePropertyReflection->isReadOnly()) {
3782-
continue;
3784+
$propertyReflection = $this->propertyReflectionFinder->findPropertyReflectionFromNode($expr, $this);
3785+
if ($propertyReflection === null) {
3786+
continue 2;
3787+
}
3788+
3789+
$nativePropertyReflection = $propertyReflection->getNativeReflection();
3790+
if ($nativePropertyReflection === null || !$nativePropertyReflection->isReadOnly()) {
3791+
continue 2;
3792+
}
3793+
3794+
$expr = $expr->var;
37833795
}
37843796

37853797
$expressionTypes[$exprString] = $typeHolder;

‎tests/PHPStan/Analyser/nsrt/bug-13321b.php‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66

77
class Foo
88
{
9-
public function __construct(public string $value)
9+
public function __construct(
10+
public string $value,
11+
readonly public string $readonlyValue,
12+
)
1013
{
1114
}
1215
}
@@ -27,13 +30,18 @@ public function bar(): void
2730
if ($this->foo->value === '') {
2831
return;
2932
}
33+
if ($this->foo->readonlyValue === '') {
34+
return;
35+
}
3036

3137
assertType(Foo::class, $this->foo);
3238
assertType('non-empty-string', $this->foo->value);
39+
assertType('non-empty-string', $this->foo->readonlyValue);
3340

3441
$test = function () {
3542
assertType(Foo::class, $this->foo);
3643
assertType('string', $this->foo->value);
44+
assertType('non-empty-string', $this->foo->readonlyValue);
3745
};
3846

3947
$test();

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /