## Why is this an issue?

An empty function is generally considered bad practice and can lead to confusion, readability, and maintenance issues. Empty functions bring no functionality and are misleading to others as they might think the function implementation fulfills a specific and identified requirement.

There are several reasons for a function not to have a body:

- It is an unintentional omission, and should be fixed to prevent an unexpected behavior in production.
- It is not yet, or never will be, supported. In this case an exception should be thrown.
- The method is an intentionally-blank override. In this case a nested comment should explain the reason for the blank override.

### Exceptions

This rule doesn’t raise an issue on empty methods in abstract classes.

    abstract class Animal {
      public function speak() {}  // default implementation ignored
    }

## How to fix it

### Code examples

#### Noncompliant code example

    public function shouldNotBeEmpty() {  // Noncompliant - method is empty
    }

    public function notImplemented() {  // Noncompliant - method is empty
    }

    public function emptyOnPurpose() {  // Noncompliant - method is empty
    }

#### Compliant solution

    public function shouldNotBeEmpty() {
      doSomething();
    }

    public function notImplemented() {
      throw new Exception('notImplemented() cannot be performed because ...');
    }

    public function emptyOnPurpose() {
      // comment explaining why the method is empty
    }