## Why is this an issue?

A common code smell that can hinder the clarity of source code is making assignments within sub-expressions. This practice involves assigning a value to a variable inside a larger expression, such as within a loop or a conditional statement.

This practice essentially gives a side-effect to a larger expression, thus making it less readable. This often leads to confusion and potential errors.

### Exceptions

This rule ignores assignments in conditions of `while` statements and assignments enclosed in relational expressions.

    while (($line = next_line()) != NULL) {...}

    while ($line = next_line()) {...}

## How to fix it

Making assignments within sub-expressions can hinder the clarity of source code.

This practice essentially gives a side-effect to a larger expression, thus making it less readable. This often leads to confusion and potential errors.

Extracting assignments into separate statements is encouraged to keep the code clear and straightforward.

### Code examples

#### Noncompliant code example

    if (($val = value()) && check()) { // Noncompliant
    }

#### Compliant solution

    $val = value();
    if ($val && check()) {
    }

or

    if ($val == value() && check()) { // Original intention might have been to use equality operator and not assignment
    }

## Resources

- CWE - CWE-481 - Assigning instead of Comparing