• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Składnia funkcji match()

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
452 wizyt
pytanie zadane 10 kwietnia 2022 w PHP przez Bakkit Dyskutant (7,600 p.)

Cześć.

Mam problem z funkcją match, która została dodana do PHP w wersji 8.

Kod wygląda tak:

match($input) {
        default => action1(),
        "1" => action1(),
        "2" => action2(),
        "3" => action3(),
    };

Jak widać, przypadek "1" i default wykonują tę samą akcję, więc chciałbym skrócić te dwie linie do jednej. Znalazłem informację, że można zrobić coś takiego:

match($input) {
        "jeden", "dwa", "trzy", "cztery" => jakasAkcja(),
    };

i wtedy jakasAkcja() wykona się dla wszystkich przypadków, ale gdy po przecinku dodam default, czyli:

match($input) {
        "jeden", "dwa", "trzy", "cztery", default => jakasAkcja(),
    };

interpreter wyrzuca błąd składniowy.

 

Jest jakiś sposób na rozwiązanie tego problemu?

1 odpowiedź

+3 głosów
odpowiedź 10 kwietnia 2022 przez Arkadiusz Waluk Ekspert (289,990 p.)
wybrane 10 kwietnia 2022 przez Bakkit
 
Najlepsza

Prawdę mówiąc nie wiem czy można użyć default jednocześnie z innymi opcjami, nie spotkałem się z tym, więc może odpowiedź nie będzie w tym kontekście pomocna.

Jednak skoro zachowanie dla jeden, dwa, trzy, cztery i default jest takie same, to przecież równie dobrze możesz ich w ogóle nie podawać? Zostaw samo default, a wyżej wymień inne opcje, dla których akcja ma być inna. Wtedy automatycznie dla niewymienionych zostanie zastosowany default i wśród nich będą jeden, dwa, trzy, cztery.

Alternatywnie możesz też zrobić:

match($input) {
    "jeden", "dwa", "trzy", "cztery" => jakasAkcja(),
    default => jakasAkcja()
};

 

komentarz 10 kwietnia 2022 przez Bakkit Dyskutant (7,600 p.)

Jednak skoro zachowanie dla jeden, dwa, trzy, cztery i default jest takie same,

Nie jest :)

Bloczek kodu, który przytoczyłeś stworzyłem podglądowo (chyba aż za bardzo, moja wina). Mój problem bardziej odwzorowuje pierwszy kod w poście.

1
komentarz 10 kwietnia 2022 przez Arkadiusz Waluk Ekspert (289,990 p.)

Ok, ale zasada jest ta sama - jeśli nie wymienisz tam opcji 1, to i tak zostanie użyty default, a skoro akcja jest ta sama to zapisanie jej nic nie zmienia, co najwyżej może to być kwestia czytelności.

Czyli zamiast Twojego pierwszego kodu mogłoby być:

match($input) {
        default => action1(),
        "2" => action2(),
        "3" => action3(),
    };

I działanie będzie przecież identyczne jak z dodatkową linijką z "1".

2
komentarz 10 kwietnia 2022 przez Bakkit Dyskutant (7,600 p.)
Racja, zbyt pochopnie oceniłem Twoje rozwiązanie, dzięki! :)

Podobne pytania

0 głosów
1 odpowiedź 145 wizyt
pytanie zadane 31 grudnia 2016 w JavaScript przez Śmieszek_;3 Użytkownik (780 p.)
0 głosów
3 odpowiedzi 315 wizyt
pytanie zadane 14 lipca 2020 w PHP przez Filipczak Gaduła (4,020 p.)
+1 głos
1 odpowiedź 650 wizyt
pytanie zadane 11 stycznia 2022 w JavaScript przez Bakkit Dyskutant (7,600 p.)

93,191 zapytań

142,206 odpowiedzi

322,042 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 3053p. - dia-Chann
  2. 2998p. - Łukasz Piwowar
  3. 2993p. - Łukasz Eckert
  4. 2970p. - CC PL
  5. 2930p. - Tomasz Bielak
  6. 2907p. - Łukasz Siedlecki
  7. 2890p. - rucin93
  8. 2584p. - Adrian Wieprzkowicz
  9. 2536p. - Mikbac
  10. 2485p. - Marcin Putra
  11. 2461p. - Michał Telesz
  12. 2418p. - Michal Drewniak
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...