"Guess a random letter" game with command line interface
You are using exceptions for flow control, and that is considered an anti-pattern.
Exceptions are meant for unhandlable conditions that would otherwise corrupt your application. Winning the game should not corrupt the application and cause undefined behavior. If it does, you are likely building a stock trading application (I'm only kidding ;-) of course).
Invalid input could certainly corrupt things or cause undefined behavior, but in this case your program should expect invalid input and handle it gracefully. Always expect the unexpected with user input.
When reading input, check that it is correct. Loop until you get correct input.
The $game-turn() method could return a &quot;result&quot; object, which reports back whether the game has been won, and if so who the winner is (and possibly a score). Again, handle this with a simple if statement:
$result = $game-&gt;turn($input);

if ($result-&gt;isWinningTurn()) {
    echo &quot;Winner! {$result-&gt;winner}&quot;;
}
else {
    echo &quot;next move&quot;;
}

If $game-&gt;turn() throws an exception, I would expect it to be an unhandled condition or something unrecoverable like an out of memory exception. As a programmer, I would be VERY surprised if winning the game crashed the program.
Now, the turn() method should throw an exception if you give it bad input. That makes sense. But you need to check for valid input before calling $game-&gt;turn($input). You likely need an isValidInput method on the game object in order to check this.
$game-turn(&quot;d&quot;); // I expect this to throw

if ($game-&gt;isValidInput($input)) {
    $result = $game-&gt;turn($input)); // I expect this to always succeed

    if ($result.isWinningTurn()) {
        ...
    }
    else {
        ...
    }
}
else {
    echo &quot;Bad input, try again.&quot;
}