1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-05 13:10:49 +01:00
psalm/docs/running_psalm/issues/PossiblyNullArgument.md

56 lines
1.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PossiblyNullArgument
Emitted when calling a function with a value thats possibly null when the function does not expect it
```php
<?php
function foo(string $s): void {}
foo(rand(0, 1) ? "hello" : null);
```
## Common Problem Cases
### Using a Function Call inside `if`
```php
<?php
if (is_string($cat->getName()) {
foo($cat->getName());
}
```
This fails since it's not guaranteed that subsequent calls to `$cat->getName()` always give the same result.
#### Possible Solutions
Use a variable:
```php
<?php
$catName = $cat->getName();
if (is_string($catName) {
foo($catName);
}
unset($catName);
```
Or add [`@psalm-mutation-free`](../../annotating_code/supported_annotations.md#psalm-mutation-free) to the declaration of the function
### Calling Another Function After `if`
```php
<?php
if (is_string($cat->getName()) {
changeCat();
foo($cat->getName());
}
```
This fails since psalm cannot know if `changeCat()` does actually modify `$cat`.
#### Possible Solutions
* Add [`@psalm-mutation-free`](../../annotating_code/supported_annotations.md#psalm-mutation-free) to the declaration of the other function (here: `changeCat()`) too
* Use a variable: See above