In PHP, incorrect use of parentheses can cause unexpected behavior in code. Therefore, it is important to avoid the unnecessary usage of parentheses for language constructs.

## Why is this an issue?

Using constructs with parentheses can be misleading as it will produce a syntax that looks like a normal function call. However those constructs have lower precedence in the evaluation order than some others operators, this can lead to a behavior completely different from what the function syntax would hint. Also, some of the constructs have optional parameters, while modifying the code we may remove a parameter while keeping the parentheses, resulting in invalid code.

## How to fix it

When not necessary, do not use parentheses for the constructs. To be noted that some construct such as `isset()`, `exit()` or `array()` does require them. Here is the list of constructs for which parentheses could be used but should be avoided : `return`, `echo`, `break`, `clone`, `case`, `continue`, `include`, `include_once`, `require`, `require_once`, `print`, `return`, `throw`, `yield`, `yield from`

### Code examples

#### Noncompliant code example

    echo("Hello World");
    return(1);
    include("file.php");

    // Extra examples which show misleadings function syntax

    // outputs "string" and "true"
    // the expression ("string") && false is first evaluated to false, this is coerced to the empty string "" and printed
    // the print construct returns 1 which is truthy, so code in the if block is run
    if ( print("string") && false ) {
        print "true";
    }

    // parse error
    return();

    // parse error: 'echo' construct accepts multiple parameters, but with parentheses this is an invalid syntax
    echo("Hello", "World");

    // this does not include the file 'vars.php' because 'include' construct has lower precedence than the comparison
    // first, ('vars.php') == TRUE is being evaluated and is resolved into '1'
    // then, the include construct will be executed with this value
    // this is equivalent to: include('1')
    if (include('vars.php') == TRUE) {
        echo 'OK';
    }

#### Compliant solution

    echo "Hello World";
    return 1;
    include "file.php";

## Resources

### Documentation

- PHP List of Keywords