== Why is this an issue?

Because it is dynamically typed, PHP does not enforce a return type on a function. This means that different paths through a function can return different types of values, which can be very confusing to the user and significantly harder to maintain.


In particular, it is consequently also possible to mix empty ``++return++`` statements (implicitly returning ``++null++``) with some returning an expression. This rule verifies that all the ``++return++`` statements from a function are consistent.

=== Noncompliant code example

[source,php]
----
function foo($a) { // Noncompliant, function will return "true" or null
  if ($a == 1) {
    return true;
  }
  return;
}
----

=== Compliant solution

[source,php]
----
function foo($a) {
  if ($a == 1) {
    return true;
  }
  return false;
}
----

or 


[source,php]
----
function foo($a) {
  if ($a == 1) {
    return true;
  }
  return null;
}
----

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

include::../highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
