Throwing and catching exceptions in PHP is important to prevent errors from breaking applications, but on websites it is better to handle exceptions internally by bubbling them up to a central exception handler where they can be logged and error pages displayed. Exception classes should extend the base Exception class and be organized in a layered structure corresponding to the application design to make it clear what types of exceptions can be thrown and caught. Sample code demonstrates how to define custom exception classes corresponding to different error scenarios and catch them selectively to perform specific error handling actions.