1
0
mirror of https://github.com/restoreddev/phpapprentice.git synced 2025-08-02 12:57:59 +02:00
Files
phpapprentice/content/18-exceptions.md
2019-07-13 08:48:55 -05:00

83 lines
2.3 KiB
Markdown

+++
title = "Exceptions"
description = "Throwing errors"
tags = ["php", "exception"]
slug = "exceptions"
previous = "abstract.html"
next = "web/http.html"
+++
Sometimes things go wrong when someone uses your code. How do we handle this situation?
PHP has Exceptions to define errors and the ability to `throw` them to stop code
execution and tell the user of your code that something is wrong.
```php
<?php
class Processor
{
public function charge($creditCard)
{
if (strlen($creditCard->getNumber()) !== 16) {
throw new Exception('Credit card is not right');
}
}
}
```
In this case, if someone tried to use the `Processor` class
to charge a credit card number that is not 16 characters long, an
`Exception` will be thrown which stops the rest of the code from running.
```php
$processor = new Processor();
$processor->charge('1234');
```
A developer who wants to prevent an exception from stopping code execution
can catch the exception and use it for logging or display the error to a user.
Just wrap the code that might throw an exception with the keyword `try` and braces
followed by `catch`, the exception type in parentheses and more braces.
```php
try {
$processor->charge('1234');
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}
```
You can make your own custom exceptions as well. They are just classes
that extend the `Exception` class.
```php
class MyCustomException extends Exception {}
```
Then, you can try to catch your exception instead of the base exception.
```php
try {
throw new MyCustomException('I am a custom exception');
} catch (MyCustomException $e) {
echo "Caught MyCustomException\n";
}
```
Since all exceptions inherit from `Exception`, catching
`Exception` will catch any and all exceptions that might be thrown.
```php
try {
throw new MyCustomException('I inherit from Exception');
} catch (Exception $e) {
echo "Still caught MyCustomException\n";
}
```
You can also create multiple catch blocks to handle different types of exceptions in
one try-catch.
```php
try {
throw new MyCustomException('I am being thrown again');
} catch (MyCustomException $e) {
echo "MyCustomException was caught\n";
} catch (Exception $e) {
echo "Just in case a different exception is thrown\n";
}
```