The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз языка программирования PHP 8.1, opennews (?), 25-Ноя-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


40. "Релиз языка программирования PHP 8.1"  +4 +/
Сообщение от pavlinux (ok), 26-Ноя-21, 00:30 
В ихавом enum могут быть не только enum


enum Status
{
    case DRAFT;
    case PUBLISHED;
    case ARCHIVED;
    
    public function color(): string
    {
        return match($this)
        {
            Status::DRAFT => 'grey',  
            Status::PUBLISHED => 'green',  
            Status::ARCHIVED => 'red',  
        };
    }
}

юзать так:


$status = Status::ARCHIVED;

$status->color(); // 'red'

https://stitcher.io/blog/php-enums


Ответить | Правка | Наверх | Cообщить модератору

46. "Релиз языка программирования PHP 8.1"  +1 +/
Сообщение от Твайлайт Спаркл (?), 26-Ноя-21, 06:10 
#[allow(dead_code)]
enum Status {
    Draft,
    Published,
    Archived,
}

impl Status {
    #[must_use]
    pub fn color(&self) -> &'static str {
        match self {
            Self::Draft => "grey",
            Self::Published => "green",
            Self::Archived => "red",
        }
    }
}

fn main() {
    let status = Status::Archived;
    println!("{}", status.color());  // 'red'
}

Ответить | Правка | Наверх | Cообщить модератору

66. "Релиз языка программирования PHP 8.1"  +2 +/
Сообщение от anonymous (??), 26-Ноя-21, 11:17 
А зачем нужны "allow(dead_code)" и "must_use"? Выглядит как какая-то ненужная магия.
Ответить | Правка | Наверх | Cообщить модератору

83. "Релиз языка программирования PHP 8.1"  –3 +/
Сообщение от Аноним (78), 26-Ноя-21, 12:04 
Дак растаманы! же писали! В здравом уме такое! не придумать!
Ответить | Правка | Наверх | Cообщить модератору

153. "Релиз языка программирования PHP 8.1"  +/
Сообщение от anonymous (??), 27-Ноя-21, 11:34 
Лично меня вполне устраивает объяснение ниже.
Ответить | Правка | Наверх | Cообщить модератору

85. "Релиз языка программирования PHP 8.1"  +3 +/
Сообщение от Твайлайт Спаркл (ok), 26-Ноя-21, 12:28 
> А зачем нужны "allow(dead_code)" и "must_use"? Выглядит как какая-то ненужная магия.

allow(dead_code) действительно не нужен, он заглушает предупреждения, что не все варианты enum'a используются.

А вот must_use довольно крут. Он добавляет предупреждение на такой код:
status.color();
То есть возвращаемое значение должно быть использовано (как минимум присвоено в переменную).
let _ = status.color();

Ответить | Правка | К родителю #66 | Наверх | Cообщить модератору

138. "Релиз языка программирования PHP 8.1"  +/
Сообщение от anonymous (??), 27-Ноя-21, 01:27 
Понятно. Makes sense.
Ответить | Правка | Наверх | Cообщить модератору

51. "Релиз языка программирования PHP 8.1"  –4 +/
Сообщение от Ilya Indigo (ok), 26-Ноя-21, 07:19 
abstract class News
{
    public const status =
    [
        'draft' => 'grey',  
        'published' => 'green',  
        'arcived' => 'red',
    ];

    public static function test()
    {
        ...
        self::status['arcived']; // 'red'
        ...  
    }

}

News::status['arcived']; // 'red'

Зачем добавили эти enum-ы с таким синтаксисом вообще не понятно.
Даже от match была польза, а зачем нужны такие enum-ы не представляю.

Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

73. "Релиз языка программирования PHP 8.1"  –2 +/
Сообщение от Онаним (?), 26-Ноя-21, 11:45 
Окей, а теперь расширь это на два признака. И получишь шляпку в два массива.
А теперь расширь на вычисляемое.

Кстати для просто одиночного типозначения метод с match не нужен, есть value(), который можно задать в case.

Так-то нынешний Enum - это по сути сахар вокруг специфичного класса.

Ответить | Правка | Наверх | Cообщить модератору

77. "Релиз языка программирования PHP 8.1"  +/
Сообщение от Ilya Indigo (ok), 26-Ноя-21, 11:55 
Я ни черта не понял из того что Вы написали.
Да и ф-ии value() в php нет.
Ответить | Правка | Наверх | Cообщить модератору

107. "Релиз языка программирования PHP 8.1"  +/
Сообщение от Здрасьте (?), 26-Ноя-21, 16:40 
Функции нет, есть свойство. Если значения присвоены, их можно получить через ->value
Ответить | Правка | Наверх | Cообщить модератору

52. "Релиз языка программирования PHP 8.1"  +1 +/
Сообщение от x3who (?), 26-Ноя-21, 07:25 
Это не отменяет вопроса зачем там case. Ведь "DRAFT;" отличается от "public function x(...)" если уж так хочется добавить методы.
Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

106. "Релиз языка программирования PHP 8.1"  –1 +/
Сообщение от Здрасьте (?), 26-Ноя-21, 16:21 
Потому что я могу захотеть назвать значение enum «public».
Ответить | Правка | Наверх | Cообщить модератору

144. "Релиз языка программирования PHP 8.1"  +/
Сообщение от Аноним (78), 27-Ноя-21, 07:00 
До такого разве что растаманы могут додуматься.
Ответить | Правка | Наверх | Cообщить модератору

150. "Релиз языка программирования PHP 8.1"  +/
Сообщение от x3who (?), 27-Ноя-21, 10:54 
> До такого разве что растаманы могут додуматься.

Вполне законное желание для enum. Допустим у тебя в приложении есть публичные и приватные данные. Тут сам бог велел присобачить к ним (к данным) соотв флажок перечислимого типа. Раст тут ни при чем.

Ответить | Правка | Наверх | Cообщить модератору

151. "Релиз языка программирования PHP 8.1"  +/
Сообщение от x3who (?), 27-Ноя-21, 10:55 
> Потому что я могу захотеть назвать значение enum «public».

Не "public function x(...)" же.

Ответить | Правка | К родителю #106 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру