Hướng dẫn php enum could not be converted to string - php enum không thể chuyển đổi thành chuỗi

Tôi tự hỏi tại sao không thể cung cấp triển khai __toString cho Enum.

IDE nói rằng "enum có thể không bao gồm '__tostring'". Tuy nhiên, đó là điều đầu tiên tôi nghĩ về một khi tôi đã tạo ra Enum. Trước đây tôi đã sử dụng các đối tượng giá trị đóng gói các chuỗi trong mã của mình, sử dụng quá trình đúc chuỗi khi cần thiết. Bây giờ tôi muốn di chuyển chúng vào các enums, nhưng những người đó chống lại.

#[Immutable]
enum SaveKlinesFromApiQueue: string
{
    case DEFAULT = 'save_klines_from_api_queue';
    case PRIORITY = 'save_klines_from_api_priority_queue';

    public function __toString[]: string
    {
        return $this->value;
    }
}

Hỏi ngày 5 tháng 12 năm 2021 lúc 15:25Dec 5, 2021 at 15:25

6

Tôi nghĩ rằng bạn không nên sử dụng Enum nếu bạn muốn sử dụng nó như

abstract class SaveKlinesFromApiQueue
{
    public const DEFAULT = 'save_klines_from_api_queue';
    public const PRIORITY = 'save_klines_from_api_priority_queue';
}
0 trong một lớp học thông thường. Cân nhắc việc tạo một lớp trừu tượng thay vì như thế này:

abstract class SaveKlinesFromApiQueue
{
    public const DEFAULT = 'save_klines_from_api_queue';
    public const PRIORITY = 'save_klines_from_api_priority_queue';
}

Ngoài việc sử dụng đúng enum, trong trường hợp của bạn, bạn có thể sử dụng:

echo SaveKlinesFromApiQueue::DEFAULT->name;

abstract class SaveKlinesFromApiQueue
{
    public const DEFAULT = 'save_klines_from_api_queue';
    public const PRIORITY = 'save_klines_from_api_priority_queue';
}
1

hoặc

echo SaveKlinesFromApiQueue::DEFAULT->value;

abstract class SaveKlinesFromApiQueue
{
    public const DEFAULT = 'save_klines_from_api_queue';
    public const PRIORITY = 'save_klines_from_api_priority_queue';
}
2

Đã trả lời ngày 14 tháng 7 lúc 13:52Jul 14 at 13:52

Như Chris đề cập, các phương pháp ma thuật không được phép.

Đối với 2 [?]

Để có được giá trị chuỗi của một duy nhất, bạn chỉ có thể sử dụng

abstract class SaveKlinesFromApiQueue
{
    public const DEFAULT = 'save_klines_from_api_queue';
    public const PRIORITY = 'save_klines_from_api_priority_queue';
}
3.

Nếu bạn muốn các giá trị chuỗi của tất cả chúng, chỉ cần thêm một vòng lặp trong một phương thức:

    public static function strings[]: array
    {
        $strings = [];
        foreach[self::cases[] as $case] {
            $strings[] = $case->value;
        }
        return $strings;
    }

Đã trả lời ngày 7 tháng 2 lúc 22:02Feb 7 at 22:02

Puggan Sepuggan SEPuggan Se

5.6402 Huy hiệu vàng23 Huy hiệu bạc46 Huy hiệu đồng2 gold badges23 silver badges46 bronze badges

1

Đối với các giá trị đơn giản, sử dụng "const" thay vì "trường hợp":

enum SaveKlinesFromApiQueue: string {
    const DEFAULT = 'save_klines_from_api_queue';
    const PRIORITY = 'save_klines_from_api_priority_queue';
}

echo SaveKlinesFromApiQueue::DEFAULT;

Đã trả lời ngày 7 tháng 10 lúc 14:34Oct 7 at 14:34

Việc thực hiện các công việc của Jsonserializable nếu trường hợp sử dụng của bạn liên quan đến việc chuyển đổi thuộc tính Enum thành JSON.

enum ParameterTypeEnum implements \JsonSerializable
{
    case QUERY;
    case COOKIE;
    case HEADER;
    case PATH;

    public function getType[]: string
    {
        return match[$this] {
            ParameterTypeEnum::QUERY => 'query',
            ParameterTypeEnum::COOKIE => 'cookie',
            ParameterTypeEnum::HEADER => 'header',
            ParameterTypeEnum::PATH => 'path',
        };
    }

    public function jsonSerialize[]: mixed
    {
        return $this->getType[];
    }
}

Đã trả lời ngày 10 tháng 6 lúc 22:38Jun 10 at 22:38

Cnizzardinicnizzardinicnizzardini

1.1671 Huy hiệu vàng13 Huy hiệu bạc26 Huy hiệu đồng1 gold badge13 silver badges26 bronze badges

2

Sự mô tả

Mã sau:

Bài Viết Liên Quan

Chủ Đề