website/errors/if.condNotBoolean.md
<?php declare(strict_types = 1);
function greet(string $name): string
{
if ($name) { // error: Only booleans are allowed in an if condition, string given.
return "Hello, $name!";
}
return 'Hello, stranger!';
}
This rule is provided by the package phpstan/phpstan-strict-rules.
PHP performs implicit type coercion when evaluating conditions. Values like 0, '', '0', [], and null are considered falsy. This implicit coercion can mask bugs -- for example, the string '0' is falsy, which may not be the intended behaviour.
Requiring explicit boolean expressions makes the code's intent clearer and avoids subtle errors from truthy/falsy coercion.
Use an explicit comparison that returns a boolean:
<?php declare(strict_types = 1);
function greet(string $name): string
{
- if ($name) {
+ if ($name !== '') {
return "Hello, $name!";
}
return 'Hello, stranger!';
}
For nullable types, compare against null explicitly:
<?php declare(strict_types = 1);
function process(?array $items): int
{
if ($items !== null) {
return count($items);
}
return 0;
}