Глава 34: Черновик главы Исключения

This commit is contained in:
Igor Simdyanov
2022-05-23 21:29:32 +03:00
parent 57d41e9522
commit cb05904fa2
6 changed files with 150 additions and 0 deletions

40
exceptions/destruct.php Normal file
View File

@ -0,0 +1,40 @@
<?php
// Класс, комментирующий операции со своим объектом
class Orator
{
private $name;
function __construct($name)
{
$this->name = $name;
echo "Создан объект {$this->name}<br />";
}
function __destruct()
{
echo "Уничтожен объект {$this->name}<br />";
}
}
function outer()
{
$obj = new Orator(__METHOD__);
inner();
}
function inner()
{
$obj = new Orator(__METHOD__);
echo 'Внимание, вбрасывание!<br />';
throw new Exception('Hello!');
}
// Основная программа
echo 'Начало программы<br />';
try {
echo 'Начало try-блока<br />';
outer();
echo 'Конец try-блока<br />';
} catch (Exception $e) {
echo "Исключение: {$e->getMessage()}<br />";
}
echo 'Конец программы<br />';

View File

@ -0,0 +1,19 @@
<?php
try
{
$code = rand(0, 1);
if (!$code)
{
throw new Exception('Первая точка входа', $code);
}
else
{
throw new Exception('Вторая точка входа', $code);
}
}
catch(Exception $exp)
{
echo "Исключение {$exp->getCode()} : {$exp->getMessage()}<br />";
echo "в файле {$exp->getFile()}<br />";
echo "в строке {$exp->getLine()}<br />";
}

15
exceptions/simple.php Normal file
View File

@ -0,0 +1,15 @@
<?php
echo 'Начало программы<br />';
try {
// Код, в котором перехватываются исключения
echo 'Все, что имеет начало...<br />';
// Генерируем ("выбрасываем") исключение
throw new Exception('Hello!');
echo '...имеет и конец<br />';
} catch (Exception $exp) {
// Код обработчика
echo " Исключение: {$exp->getMessage()}<br />";
}
echo 'Конец программы<br />';

24
exceptions/stack.php Normal file
View File

@ -0,0 +1,24 @@
<?php
echo 'Начало программы<br />';
try {
echo 'Начало try-блока<br />';
outer();
echo 'Конец try-блока<br />';
} catch (Exception $e) {
echo " Исключение: {$e->getMessage()}<br />";
}
echo 'Конец программы<br />';
function outer() {
echo 'Вошли в функцию '.__METHOD__.'<br />';
inner();
echo 'Вышли из функции '.__METHOD__.'<br />';
}
function inner() {
echo 'Вошли в функцию '.__METHOD__.'<br />';
throw new Exception('Hello!');
echo 'Вышли из функции '.__METHOD__.'<br />';
}

29
exceptions/throwable.php Normal file
View File

@ -0,0 +1,29 @@
<?php
class Exception implements Throwable
{
protected string $message = ""; // Сообшение
private string $string = ""; // Свойство для __toString
protected int $code; // Код исключения
protected string $file = ""; // Файл, в котором произошло исключение
protected int $line; // Строка, в которой произошло исключение
private array $trace = []; // Трассировка вызовов методов и функций
private ?Throwable $previous = null; // Предыдущее исключение (вложенные try-блоки)
public __construct(
string $message = "",
int $code = 0,
?Throwable $previous = null
)
// Запрещает клонировать исключения
private __clone(): void
final public getMessage(): string
final public getPrevious(): ?Throwable
final public getCode(): int
final public getFile(): string
final public getLine(): int
final public getTrace(): array
final public getTraceAsString(): string
public __toString(): string
}

23
exceptions/user.php Normal file
View File

@ -0,0 +1,23 @@
<?php
class User
{
public function __construct(
private string $email,
private string $password,
private ?string $first_name = null,
private ?string $last_name = null)
{
}
public function __get(string $index) : ?string
{
return $this->$index;
}
public function __set(string $index, string $value)
{
if (isset($this->$index)) {
$this->$index = $value;
}
}
}