ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ»Π°ΡΡ Exception
ΠΠΎΠ΄Π΅Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ PHP Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π΄ΡΡΠ³ΠΈΡ
ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
PHP ΡΠΌΠ΅Π΅Ρ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ β throw β ΠΈ Π»ΠΎΠ²ΠΈΡΡ β catch β ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΠΎΠ΄ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡ Π² Π±Π»ΠΎΠΊ try, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²Π΅ΡΠΎΡΡΠ½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
ΠΠ°ΠΆΠ΄ΠΎΠΌΡ Π±Π»ΠΎΠΊΡ try ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ catch ΠΈΠ»ΠΈ finally.
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Β«Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΒ» ΠΏΠΎ ΡΡΠ΅ΠΊΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄ΡΡ
Π±Π»ΠΎΠΊ catch, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±ΡΠΎΡΠΈΠ»Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π° Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅Ρ Π²ΡΠ·Π²Π°Π»Π°, Π½Π΅Ρ Π±Π»ΠΎΠΊΠ° catch. PHP Π²ΡΠΏΠΎΠ»Π½ΠΈΡ
ΠΊΠ°ΠΆΠ΄ΡΠΉ Π±Π»ΠΎΠΊ finally, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΡΠ΅ΡΠΈΡ ΠΏΠΎ ΠΏΡΡΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ
ΡΠ°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π½Π΅ Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ Π±Π»ΠΎΠΊ catch
ΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»
Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
Π ΠΊΠΎΠ΄Π΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ instanceof ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Throwable.
ΠΠΎΠΏΡΡΠΊΠ° Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΡΠ°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ PHP.
Π‘ PHP 8.0.0 ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ throw ΡΡΠ°Π»ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ
Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ
ΠΈ Π΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π»ΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
catch
ΠΠ»ΠΎΠΊ catch ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ±ΡΠΎΡΠΈΠ» ΠΊΠΎΠ΄.
ΠΠ»ΠΎΠΊ catch ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ,
ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ Π±Π»ΠΎΠΊ ΠΏΡΠΈΡΠ²ΠΎΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΎ PHP 8.0.0 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ.
ΠΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π»ΠΎΠΊ catch, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π±Π»ΠΎΠΊ.
ΠΠ»ΠΎΠΊΠΈ catch Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ
ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π±Π»ΠΎΠΊ try Π½Π΅ Π²ΡΠ±ΡΠΎΡΠΈΠ» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅,
ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° catch, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° catch Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ, Π° ΡΠΎΡΠ½Π΅Π΅ β ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΡΠ΅ΡΠ΅Π· ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ throw. PHP ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅ Π±Π»ΠΎΠΊΠ° catch,
ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π±ΠΎΡΠ°Π», Π΅ΡΠ»ΠΈ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° Π½Π΅ Π²ΡΠ±ΡΠΎΡΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ PHP Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ΄ΡΡ Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ,
Π° ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΉ Π±Π»ΠΎΠΊ catch. PHP Π²ΡΠ΄Π°ΡΡ ΡΠ°ΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ
Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ Uncaught Exception ..., Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠΉΠΌΠ°Π»ΠΈ
ΠΈ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ set_exception_handler() Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
Π‘ PHP 7.1.0 Π² Π±Π»ΠΎΠΊΠ΅ catch Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΡΠ΅ΡΠ΅Π· ΡΠΈΠΌΠ²ΠΎΠ» Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΡ |. ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·Π½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΈΠ· ΡΠ°Π·Π½ΡΡ
ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΉ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.
Π‘ PHP 8.0.0 ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠΉΠΌΠ°Π» Π±Π»ΠΎΠΊ, Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. PHP Π²ΡΠΏΠΎΠ»Π½ΠΈΡ
Π±Π»ΠΎΠΊ catch, Π½ΠΎ Ρ Π±Π»ΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ±ΡΠΎΡΠΈΠ» ΠΊΠΎΠ΄, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π»ΠΈ.
finally
ΠΠ»ΠΎΠΊ finally ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π±Π»ΠΎΠΊΠΎΠ² catch.
PHP Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ finally ΠΏΠΎΡΠ»Π΅ Π±Π»ΠΎΠΊΠΎΠ² try ΠΈ catch,
Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π²ΡΠ±ΡΠΎΡΠΈΠ» Π»ΠΈ ΠΊΠΎΠ΄ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΈ Π΄ΠΎ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ°ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π»ΠΎΠΊΠΎΠΌ finally ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ return.
PHP Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π±Π»ΠΎΠΊ finally, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠΈΡ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠΎΠ² try ΠΈΠ»ΠΈ catch
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ return. ΠΠΎΠ»ΡΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° PHP Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ return,
ΠΎΠ½ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π΅Ρ, Π½ΠΎ Π²Π΅ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° finally.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, PHP Π²Π΅ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° finally, Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊ finally ΡΠΎΠΆΠ΅
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ return.
ΠΡΡΠ³ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈ Π±Π»ΠΎΠΊ try,
ΠΈ Π±Π»ΠΎΠΊ finally. ΠΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΠΎΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° finally ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ,
Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° try ΡΡΠ°Π½Π΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ, ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅,
Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠΈΠ»ΠΈ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ Π΄ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ set_exception_handler() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ callback-ΡΡΠ½ΠΊΡΠΈΡ,
ΠΊΠΎΡΠΎΡΡΡ PHP Π²ΡΠ·ΠΎΠ²Π΅Ρ Π²ΠΌΠ΅ΡΡΠΎ Π±Π»ΠΎΠΊΠ° catch, Π΅ΡΠ»ΠΈ Π² ΠΊΠΎΠ΄Π΅ Π½Π΅ Π²ΡΠ·Π²Π°Π»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ.
ΠΡΡΠ΅ΠΊΡ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±Π΅ΡΠ½ΡΠ»ΠΈ Π² Π±Π»ΠΎΠΊ try-catch
Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ catch.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
ΠΠ½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ PHP ΡΠ°ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΡΠ΅ΡΠ΅Π·
ΠΎΡΡΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
,
ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅
ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΡΡ Π² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΡΠ΅ΡΠ΅Π· ΠΊΠ»Π°ΡΡ ErrorException.
ΠΡΠ° ΡΠ΅Ρ
Π½ΠΈΠΊΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π΅ΡΠ°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΡΡΠΎΠ² ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
Π² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
<?php
function exceptions_error_handler($severity, $message, $filename, $lineno) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
set_error_handler('exceptions_error_handler');
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΡΠΈΠΌΠ΅Ρ #2 ΠΡΠ±ΡΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
<?php
function inverse($x) {
if (!$x) {
throw new Exception('ΠΠ΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ»Ρ.');
}
return 1 / $x;
}
try {
echo inverse(5) . "\n";
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'PHP ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ', $e->getMessage(), "\n";
}
// ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
echo "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ\n";
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
0.2
PHP ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΠ΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ»Ρ.
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ
ΠΡΠΈΠΌΠ΅Ρ #3 ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Π±Π»ΠΎΠΊΠ΅ finally
<?php
function inverse($x) {
if (!$x) {
throw new Exception('ΠΠ΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ»Ρ.');
}
return 1 / $x;
}
try {
echo inverse(5) . "\n";
} catch (Exception $e) {
echo 'PHP ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ', $e->getMessage(), "\n";
} finally {
echo "ΠΠ΅ΡΠ²ΡΠΉ Π±Π»ΠΎΠΊ finally.\n";
}
try {
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'PHP ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ', $e->getMessage(), "\n";
} finally {
echo "ΠΡΠΎΡΠΎΠΉ Π±Π»ΠΎΠΊ finally.\n";
}
// ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
echo "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ\n";
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
0.2
ΠΠ΅ΡΠ²ΡΠΉ Π±Π»ΠΎΠΊ finally.
PHP ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΠ» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΠ΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ»Ρ.
ΠΡΠΎΡΠΎΠΉ Π±Π»ΠΎΠΊ finally.
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ
ΠΡΠΈΠΌΠ΅Ρ #4 ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ finally ΠΈ return
<?php
function test() {
try {
throw new Exception('foo');
} catch (Exception $e) {
return 'catch';
} finally {
return 'finally';
}
}
echo test();
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
ΠΡΠΈΠΌΠ΅Ρ #5 ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
<?php
class MyException extends Exception { }
class Test {
public function testing() {
try {
try {
throw new MyException('foo!');
} catch (MyException $e) {
// ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π²ΡΠ±ΡΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
throw $e;
}
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
}
$foo = new Test;
$foo->testing();
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
ΠΡΠΈΠΌΠ΅Ρ #6 ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ catch
<?php
class MyException extends Exception { }
class MyOtherException extends Exception { }
class Test {
public function testing() {
try {
throw new MyException();
} catch (MyException | MyOtherException $e) {
var_dump(get_class($e));
}
}
}
$foo = new Test;
$foo->testing();
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
ΠΡΠΈΠΌΠ΅Ρ #7 ΠΡΠΈΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠ° catch Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² PHP 8.0.0 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
.
<?php
class SpecificException extends Exception {}
function test() {
throw new SpecificException('ΠΠΉ!');
}
try {
test();
} catch (SpecificException) {
print "Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±ΡΠΎΡΠΈΠ»Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ SpecificException, Π½ΠΎ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅Π²Π°ΠΆΠ½Ρ.";
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±ΡΠΎΡΠΈΠ»Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ SpecificException, Π½ΠΎ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅Π²Π°ΠΆΠ½Ρ.
ΠΡΠΈΠΌΠ΅Ρ #8 Throw ΠΊΠ°ΠΊ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² PHP 8.0.0 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
.
<?php
function test()
{
do_something_risky() or throw new Exception('Π€ΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ');
}
function do_something_risky()
{
return false; // ΠΠΌΠΈΡΠ°ΡΠΈΡ ΡΠ±ΠΎΡ
}
try {
test();
} catch (Exception $e) {
print $e->getMessage();
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
Π€ΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ
ΠΡΠΈΠΌΠ΅Ρ #9 ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠΊΠ°Ρ
try ΠΈ finally
<?php
try {
try {
throw new Exception(message: 'Π’ΡΠ΅ΡΡΠ΅', previous: new Exception('Π§Π΅ΡΠ²ΡΡΡΠΎΠ΅'));
} finally {
throw new Exception(message: 'ΠΠ΅ΡΠ²ΠΎΠ΅', previous: new Exception('ΠΡΠΎΡΠΎΠ΅'));
}
} catch (Exception $e) {
var_dump(
$e->getMessage(),
$e->getPrevious()->getMessage(),
$e->getPrevious()->getPrevious()->getMessage(),
$e->getPrevious()->getPrevious()->getPrevious()->getMessage(),
);
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
string(12) "ΠΠ΅ΡΠ²ΠΎΠ΅"
string(12) "ΠΡΠΎΡΠΎΠ΅"
string(12) "Π’ΡΠ΅ΡΡΠ΅"
string(18) "Π§Π΅ΡΠ²ΡΡΡΠΎΠ΅"