I don't like using the terms "flow control" or "exceptional case" because exceptions don't have to be "exceptional cases" -- that term is to strong for me -- and they certainly do control the flow... they reverse it back up the call stack.
Exceptions are for when a method encounters some condition that it does not know how to deal with. So it throws an Exception back up the call stack in the hope that somewhere up the chain will be someone who knows how to deal with it.
The term I see used most to describe when to use Exceptions is "abnormal" conditions. I like this because it is less strong of a word and more clear. It means "not usual" and there can only be two cases usual or not usual. Semantically "exceptional" tends to be a subset of abnormal and refers to something being far or widely outside of what is usual. I know it is just semantics, but using exceptional bugs the crap out of me because it is less clear and leaves 3 cases: usual, not usual but not exceptional, and exceptional.
I also don't like leaving Exceptions uncaught. While it may be true PHP with then throw a fatal error, a bit friendlier message can certainly be given. One thing that really bugs me about PHP is that when it kicks out a fatal error, it still sends an HTTP 200 OK header. I cannot tell you the number of sites I've seen indexed on Google with fatal error messages because something abnormal occured and Google was updating their index of them at around the same time. I always have a catch block at the top level for those rare cases where nothing else knows what to do with the Exception. In the block I then send an HTTP 500 Internal Server Error with the Exception message, as I find that to be more appropriate, more helpful, and more HTTP friendly. At least you will not be caught by a spider with your pants around your ankles 😉
Finally I don't agree with ahundiak with not equating Exceptions to warnings. I would only not equate exceptions to PHP errors that are related to running the VM. However, in my opinion standard errors that PHP gives related to functionality not pertaining to the VM certainly can be wrapped in Exceptions. I would not be surprised, and would even hope, that at some point in the future, errors that PHP generated were limited in scope to errors dealing with the VM and all other errors were thrown as Exceptions. For example, your application tries to read or write to a file. If the file cannot be opened, that is in my opinion an Exception that can be recovered from in some way (even if the file absolutely must be written for some reason, it could be written as a temp file until the problem is corrected). However, PHP will throw a warning or something, so to correctly make it an Exception case without also getting the silly PHP errors, you have to use error suppression which tends to make experienced PHP develops cringe, though I am getting used to it when the error is being suppressed to use an Exception instead.