PHP.mk документација

ЗоштоENUM не може да се прошират

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

language.enumerations.object-differences.inheritance.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека language.enumerations.object-differences.inheritance.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
ЗоштоENUM не може да се прошират

Референца за `language.enumerations.object-differences.inheritance.php` со подобрена типографија и навигација.

language.enumerations.object-differences.inheritance.php

ЗоштоENUM не може да се прошират

Класите имаат договори на своите методи:

<?php

class A {}
class
B extends A {}

function
foo(A $a) {}

function
bar(B $b) {
foo($b);
}
?>

Овој код е тип-безбеден, бидејќи Б го следи договорот на А, и преку магијата на ко/контра-варијанса, секое очекување што може да го имате од методите ќе биде зачувано, освен исклучоците.

Енумите имаат договори на своите случаи, не методи:

<?php

enum ErrorCode {
case
SOMETHING_BROKE;
}

function
quux(ErrorCode $errorCode)
{
// When written, this code appears to cover all cases
match ($errorCode) {
ErrorCode::SOMETHING_BROKE => true,
};
}

?>

На match изјава во функцијата quux може статички да се анализира за да ги покрие сите случаи во ErrorCode.

Но, замислете дека беше дозволено да се прошират енумите:

<?php

// Thought experiment code where enums are not final.
// Note, this won't actually work in PHP.
enum MoreErrorCode extends ErrorCode {
case
PEBKAC;
}

function
fot(MoreErrorCode $errorCode) {
quux($errorCode);
}

fot(MoreErrorCode::PEBKAC);

?>

Според нормалните правила за наследување, класа што проширува друга ќе ја помине проверката на типот.

Проблемот би бил тоа што match изјава во quux() веќе не ги покрива сите случаи. Бидејќи не знае за MoreErrorCode::PEBKAC проверката ќе фрли исклучок.

Поради ова, енумите се конечни и не можат да се прошират.

Белешки од корисници

Нема белешки од корисници за оваа страница.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.