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

МЕТОДИ НАENUMЕРАЦИЈА

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

language.enumerations.methods.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека language.enumerations.methods.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
МЕТОДИ НАENUMЕРАЦИЈА

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

language.enumerations.methods.php

МЕТОДИ НАENUMЕРАЦИЈА

Енумерациите (како Чисти Енумерации така и Поткрепени Енумерации) може да содржат методи и може да имплементираат интерфејси. Ако Енумерација имплементира интерфејс, тогаш секоја проверка на типот за тој интерфејс ќе ги прифати и сите случаи на таа Енумерација.

<?php

interface Colorful
{
public function
color(): string;
}

enum
Suit implements Colorful
{
case
Hearts;
case
Diamonds;
case
Clubs;
case
Spades;

// Fulfills the interface contract.
public function color(): string
{
return match(
$this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}

// Not part of an interface; that's fine.
public function shape(): string
{
return
"Rectangle";
}
}

function
paint(Colorful $c)
{
/* ... */
}

paint(Suit::Clubs); // Works

print Suit::Diamonds->shape(); // prints "Rectangle"
?>

Енумите (и Чисти Енуми и Поткрепени Енуми) можат да содржат методи и можат да имплементираат интерфејси. Ако Енум имплементира интерфејс, тогаш секоја проверка на типот за тој интерфејс ќе ги прифати сите случаи на тој Енум. Suit Во овој пример, сите четири инстанци на color() and shape()имаат два методи,

. Што се однесува до повикувачкиот код и проверките на типот, тие се однесуваат исто како и сите други инстанци на објекти.

<?php

interface Colorful
{
public function
color(): string;
}

enum
Suit: string implements Colorful
{
case
Hearts = 'H';
case
Diamonds = 'D';
case
Clubs = 'C';
case
Spades = 'S';

// Fulfills the interface contract.
public function color(): string
{
return match(
$this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}
}
?>

На Поткрепен Енум, декларацијата на интерфејсот оди по декларацијата на типот за поткрепа. $this Внатре во метод, променливата

е дефинирана и се однесува на инстанцата на Случајот. match on $this Методите можат да бидат произволно сложени, но во пракса обично ќе враќаат статична вредност или

за да обезбедат различни резултати за различни случаи. SuitColor Забележете дека во овој случај би било подобра практика за моделирање на податоци да се дефинира и

Енум Тип со вредности Црвено и Црно и да се врати тоа наместо тоа. Сепак, тоа би го искомплицирало овој пример.

<?php

interface Colorful
{
public function
color(): string;
}

final class
Suit implements UnitEnum, Colorful
{
public const
Hearts = new self('Hearts');
public const
Diamonds = new self('Diamonds');
public const
Clubs = new self('Clubs');
public const
Spades = new self('Spades');

private function
__construct(public readonly string $name) {}

public function
color(): string
{
return match(
$this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}

public function
shape(): string
{
return
"Rectangle";
}

public static function
cases(): array
{
// Illegal method, because manually defining a cases() method on an Enum is disallowed.
// See also "Value listing" section.
}
}
?>

Горната хиерархија е логички слична на следната структура на класи (иако ова не е вистинскиот код што се извршува):

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

Методите можат да бидат јавни, приватни или заштитени, иако во пракса приватните и заштитените се еквивалентни бидејќи наследувањето не е дозволено.
пред 2 години
Just to complete the function shape in the above neat example:

<?php
interface Colorful
{
    public function color(): string;
}

enum Suit implements Colorful
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;

    // Fulfills the interface contract.
    public function color(): string
    {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => 'Red',
            Suit::Clubs, Suit::Spades => 'Black',
        };
    }

    // Not part of an interface; that's fine.
    public function shape(): string
    {
           return match($this) {
               Suit::Hearts => '❤️', 
               Suit::Diamonds => '💎', 
               Suit::Clubs => '♣️', 
               Suit::Spades => ' ♠️'
           };
       
    }
}

echo Suit::Diamonds->shape();
echo PHP_EOL;
echo Suit::Clubs->shape();
На оваа страница

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

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

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

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

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