<?php
/**
* ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ»Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
*/
class MyException extends Exception
{
// ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ message ΡΡΠ°Π½Π΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ
public function __construct($message, $code = 0, ?Throwable $previous = null)
{
// ΠΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΊΠΎΠ΄
// Π£Π±Π΅Π΄ΠΈΠΌΡΡ, ΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΠ» Π·Π½Π°ΡΠ΅Π½ΠΈΡ
parent::__construct($message, $code, $previous);
}
// ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
public function __toString()
{
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}
public function customFunction()
{
echo "ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ\n";
}
}
/**
* Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
*/
class TestException
{
public $var;
const THROW_NONE = 0;
const THROW_CUSTOM = 1;
const THROW_DEFAULT = 2;
function __construct($avalue = self::THROW_NONE)
{
switch ($avalue) {
case self::THROW_CUSTOM:
// ΠΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΡΠ²ΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
throw new MyException('1 β Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ', 5);
break;
case self::THROW_DEFAULT:
// ΠΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
throw new Exception('2 β Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ', 6);
break;
default:
// ΠΠ΅Π· ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, PHP ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ
$this->var = $avalue;
break;
}
}
}
echo "# ΠΡΠΈΠΌΠ΅Ρ 1\n";
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (MyException $e) { // ΠΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΡΡΡ
echo "ΠΠ»ΠΎΠΊ catch ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅\n", $e;
$e->customFunction();
} catch (Exception $e) { // ΠΡΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ
echo "ΠΠΎΠΉΠΌΠ°Π½ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅\n", $e;
}
// ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
var_dump($o); // Null
echo "\n\n# ΠΡΠΈΠΌΠ΅Ρ 2\n";
try {
$o = new TestException(TestException::THROW_DEFAULT);
} catch (MyException $e) { // Π’ΠΈΠΏ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄ΡΡ
echo "ΠΠ»ΠΎΠΊ catch ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅\n", $e;
$e->customFunction();
} catch (Exception $e) { // ΠΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΡΡΡ
echo "ΠΠ»ΠΎΠΊ catch ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅\n", $e;
}
// ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
var_dump($o); // Null
echo "\n\n# ΠΡΠΈΠΌΠ΅Ρ 3\n";
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (Exception $e) { // ΠΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΡΡΡ
echo "ΠΠ»ΠΎΠΊ catch ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅\n", $e;
}
// ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
var_dump($o); // Null
echo "\n\n# ΠΡΠΈΠΌΠ΅Ρ 4\n";
try {
$o = new TestException();
} catch (Exception $e) { // ΠΡΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ
echo "ΠΠ»ΠΎΠΊ catch ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅\n", $e;
}
// ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
var_dump($o); // TestException