In issue 65 on Aura.Router, Optional parameters not working as expected?, we can see that the problem was this piece of code from the issue reporter:

if(isset($this->route->params["id"])) echo "id = " . $this->route->params["id"] . "<br><br>"; if(isset($this->route->params["function"])) echo "function = " . $this->route->params["function"] . "<br><br>"; if(isset($this->route->params["third"])); echo "third = " . $this->route->params["third"] . "<br><br>";

Look at that last if statement: it ends in a semicolon. Although the line beneath it that is *intended* to be the body of the if statement, as indicated by the indentation, it is *not* the body of the if statement. It gets executed no matter the outcome of the if condition.

That kind of thing is really tough to debug.

Instead, if we use braces on all conditionals, regardless of how short or long the body is, we get this:

if(isset($this->route->params["id"])) { echo "id = " . $this->route->params["id"] . "<br><br>"; } if(isset($this->route->params["function"])) { echo "function = " . $this->route->params["function"] . "<br><br>"; } if(isset($this->route->params["third"])) { } echo "third = " . $this->route->params["third"] . "<br><br>";

Then it's very easy to see what's going wrong.

That is one reason Aura adheres to PSR-2; it incorporates that rule, along with many others, that makes it easier to know what to expect when reading code. Anything unexpected becomes a signal that something may be wrong.