Π ΠΊΠ»Π°ΡΡΠ°Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°ΠΌ Π±Π΅ΡΡΡ Π½Π° ΡΠ΅Π±Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ:
<?php
class A {}
class B extends A {}
function foo(A $a) {}
function bar(B $b)
{
foo($b);
}ΠΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ»Π°ΡΡ B ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° A. Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΠ°Π³ΠΈΡ ΠΊΠΎ- ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠΎΡ ΡΠ°Π½ΡΡΡΡ, ΠΊΡΠΎΠΌΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
Π ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°ΠΌ Π±Π΅ΡΡΡ Π½Π° ΡΠ΅Π±Ρ Π²Π°ΡΠΈΠ°Π½ΡΡ, Π° Π½Π΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
<?php
enum ErrorCode
{
case SOMETHING_BROKE;
}
function quux(ErrorCode $errorCode)
{
// ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΎΡ
Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ
match ($errorCode) {
ErrorCode::SOMETHING_BROKE => true,
};
}
Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ match Π² ΡΡΠ½ΠΊΡΠΈΠΈ quux
ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ErrorCode.
ΠΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠΈΠ»ΠΈ Π±Ρ ΡΠ°ΡΡΠΈΡΡΡΡ:
<?php
// ΠΠΎΠ΄ ΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½Ρ.
// ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² PHP.
enum MoreErrorCode extends ErrorCode
{
case PEBKAC;
}
function fot(MoreErrorCode $errorCode)
{
quux($errorCode);
}
fot(MoreErrorCode::PEBKAC);ΠΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ ΠΏΡΠΎΠΉΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠ°.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΡΡΠΎΡΠ»Π° Π±Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ match Π² ΡΡΠ½ΠΊΡΠΈΠΈ quux() ΡΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΊΡΡΠ²Π°Π»ΠΎ Π±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ
Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ MoreErrorCode::PEBKAC,
ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½Ρ ΠΈ ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΡΠ°ΡΡΠΈΡΡΡΡ.