mirror of
https://github.com/igorsimdyanov/php8.git
synced 2025-08-10 03:01:01 +00:00
Глава 34: Черновик главы Исключения
This commit is contained in:
40
exceptions/destruct.php
Normal file
40
exceptions/destruct.php
Normal 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 />';
|
19
exceptions/exception_interface.php
Normal file
19
exceptions/exception_interface.php
Normal 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
15
exceptions/simple.php
Normal 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
24
exceptions/stack.php
Normal 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
29
exceptions/throwable.php
Normal 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
23
exceptions/user.php
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user