mirror of
https://github.com/danog/psalm.git
synced 2024-12-06 05:29:00 +01:00
ea52b9d23a
While I was searching for some code, ran across these.
1.1 KiB
1.1 KiB
MixedMethodCall
Emitted when calling a method on a value that Psalm cannot infer a type for
<?php
class A {
public function foo() : void {}
}
function callFoo(array $arr) : void {
array_pop($arr)->foo(); // MixedMethodCall emitted here
}
callFoo(
[new A()]
);
Why this is bad
If Psalm does not know what array_pop($arr)
is, it can't verify whether array_pop($arr)->foo()
will work or not.
How to fix
Make sure that to provide as much type information as possible to Psalm so that it can perform inference. For example, you could add a docblock to the callFoo
function:
<?php
class A {
public function foo() : void {}
}
/**
* @param array<A> $arr
*/
function callFoo(array $arr) : void {
array_pop($arr)->foo(); // MixedMethodCall emitted here
}
callFoo(
[new A()]
);
Alternatively you could add a runtime check:
<?php
class A {
public function foo() : void {}
}
function callFoo(array $arr) : void {
$a = array_pop($arr);
assert($a instanceof A);
$a->foo(); // MixedMethodCall emitted here
}
callFoo(
[new A()]
);