Correctness Rules
This document details the rules available in the Correctness
category.
Available Rules
Rule | Code |
---|---|
Assert Description | assert-description |
Identity Comparison | identity-comparison |
Invalid Open Tag | invalid-open-tag |
No Assign In Condition | no-assign-in-condition |
No Boolean Literal Comparison | no-boolean-literal-comparison |
No Empty Catch Clause | no-empty-catch-clause |
Parameter Type | parameter-type |
Property Type | property-type |
Return Type | return-type |
Strict Assertions | strict-assertions |
Strict Behavior | strict-behavior |
Strict Types | strict-types |
assert-description
Detects assert functions that do not have a description.
Assert functions should have a description to make it easier to understand the purpose of the assertion.
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
Examples
Correct Code
<?php
assert($user->isActivated(), 'User MUST be activated at this point.');
Incorrect Code
<?php
assert($user->isActivated());
identity-comparison
Detects equality and inequality comparisons that should use identity comparison operators.
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
Examples
Correct Code
<?php
if ($a === $b) {
echo '$a is same as $b';
}
Incorrect Code
<?php
if ($a == $b) {
echo '$a is same as $b';
}
invalid-open-tag
Detects misspelled PHP opening tags like <php?
instead of <?php
.
A misspelled opening tag will cause the PHP interpreter to treat the following code as plain text, leading to the code being output directly to the browser instead of being executed. This can cause unexpected behavior and potential security vulnerabilities.
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "note" |
Examples
Correct Code
<?php
echo 'Hello, world!';
Incorrect Code
<php?
echo 'Hello, world!';
no-assign-in-condition
Detects assignments in conditions which can lead to unexpected behavior and make the code harder to read and understand.
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
Examples
Correct Code
<?php
$x = 1;
if ($x == 1) {
// ...
}
Incorrect Code
<?php
if ($x = 1) {
// ...
}
no-boolean-literal-comparison
Disallows comparisons where a boolean literal is used as an operand.
Comparing with a boolean literal (true
or false
) is redundant and can often be simplified. For example, if ($x === true)
is equivalent to the more concise if ($x)
, and if ($y !== false)
is the same as if ($y)
.
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "note" |
Examples
Correct Code
<?php
if ($x) { /* ... */ }
if (!$y) { /* ... */ }
Incorrect Code
<?php
if ($x === true) { /* ... */ }
if ($y != false) { /* ... */ }
no-empty-catch-clause
Warns when a catch
clause is empty.
An empty catch
clause suppresses exceptions without handling or logging them, potentially hiding errors that should be addressed. This practice, known as "exception swallowing," can make debugging significantly more difficult.
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
Examples
Correct Code
<?php
try {
// some code that might throw an exception
} catch(Exception $e) {
// Handle the error, log it, or re-throw it.
error_log($e->getMessage());
}
Incorrect Code
<?php
try {
// some code
} catch(Exception $e) {
// This block is empty and swallows the exception.
}
parameter-type
Detects parameters that are missing a type hint.
Requirements
- PHP Version: PHP
>= 7.0.0
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
ignore-closure | boolean | false |
ignore-arrow-function | boolean | false |
Examples
Correct Code
<?php
function foo(string $bar): void
{
// ...
}
Incorrect Code
<?php
function foo($bar): void
{
// ...
}
property-type
Detects class-like properties that are missing a type hint.
Requirements
- PHP Version: PHP
>= 7.4.0
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
Examples
Correct Code
<?php
class Foo
{
public int $bar;
}
Incorrect Code
<?php
class Foo
{
public $bar;
}
return-type
Detects functions, methods, closures, and arrow functions that are missing a return type hint.
Requirements
- PHP Version: PHP
>= 7.0.0
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
ignore-closure | boolean | false |
ignore-arrow-function | boolean | false |
Examples
Correct Code
<?php
function foo(): int {
return 42;
}
Incorrect Code
<?php
function foo() {
return 42;
}
strict-assertions
Detects non-strict assertions in test methods. Assertions should use strict comparison methods, such as assertSame
or assertNotSame
instead of assertEquals
or assertNotEquals
.
Requirements
- Integration:
PHPUnit
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
Examples
Correct Code
<?php
declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class SomeTest extends TestCase
{
public function testSomething(): void
{
$this->assertSame(42, 42);
}
}
Incorrect Code
<?php
declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class SomeTest extends TestCase
{
public function testSomething(): void
{
$this->assertEquals(42, 42);
}
}
strict-behavior
Detects functions relying on loose comparison unless the $strict
parameter is specified. The use of loose comparison for these functions may lead to hard-to-debug, unexpected behaviors.
Requirements
- PHP Version: PHP
>= 7.0.0
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
allow-loose-behavior | boolean | false |
Examples
Correct Code
<?php
in_array(1, ['foo', 'bar', 'baz'], strict: true);
Incorrect Code
<?php
in_array(1, ['foo', 'bar', 'baz']);
strict-types
Detects missing declare(strict_types=1);
statement at the beginning of the file.
Requirements
- PHP Version: PHP
>= 7.0.0
Configuration
Option | Type | Default |
---|---|---|
enabled | boolean | true |
level | string | "warning" |
allow-disabling | boolean | false |
Examples
Correct Code
<?php
declare(strict_types=1);
echo "Hello, World!";
Incorrect Code
<?php
echo "Hello, World!";