![]() |
1. Posty w tym forum są poddawane moderacji więc nie dodawaj ich kilka razy.
2. Akceptujemy tylko wartościowe wiadomości o php lub pochodnych
3. Publikacja newsa na wortalu po moderacji oscyluje w granicach 30min
4. Wstawiane grafiki powinny mieć maksymalną szerokość 357px
Zapraszamy do uzupełniania wortalu o ciekawe informacje :)
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 872 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Od wersji PHP 8 otrzymamy nową instrukcję warunkową match. Będzie to świetna funkcja, która będzie częstszym wyborem do korzystania niż switch. Spójrzmy na różnice.
Klasyczna instrukcja switch prezentuje się tak:
Nowa instrukcja matchbędzie można użyć w ten sposób:
Podsumowując match: - instrukcja jest znacznie krótsza niż switch; - nie wymaga używania break; - może łączyć różne warunki, tylko używając jako separator przecinka; - wartość jest przypisywana do zmiennej, nie trzeba przypisywać wartości do nich wielokrotnie; - reszta zalet poniżej... ### Brak wymuszania typu Instrukcja match będzie oparta na ścisłej kontroli wartości (strict). To tak, jakby używać === zamiast == w instrukcjach IF. Czasem może to być uciążliwe, ale stosowanie ścisłej kontroli to przyszłość języka PHP.
Brak wartości w instrukcji match zwraca błąd Jeżeli instrikcja match będzie bez wartości domyślnej lub wartość będzie nieustawiona, PHP zgłosi wyjątek UnhandledMatchError. Tutaj też jest większy rygor, ale zapobiegnie to przed niezauważeniem błędów podczas pisania kodu.
### Łączenie warunków Już powyższych przykładach można było zobaczyć połączone warunki, oddzielone jedynie przecinkami, coś podobnego jak przy switch:
Przy match okazuje się to prostsze, z mniejszą ilością pisania i mniej możliwości na błędy.
### Złożone warunki i wydajność Możliwość użycia wyrażeń regularnych podczas dopasowania może być bardzo użyteczny przy wielu podobnych wartościach warunkowych, ale należy pamiętać że płynie to na spadek wydajności aplikacji, jednakże użyteczność tego wzorca dodatkowo pozytywnie odbije się na częstotliwości użycia nowej instrukcji.
### Rzucanie wyjątków Rzucanie wyjątków throw w PHP 8, wtedy gdy potrzebujesz tak jak na przykładzie poniżej:
### Dopasowanie wzorców Jedna z technik używana w innych językach programowania, umożliwiająca bardziej złożone dopasowywanie niż proste wartości. Coś jak wyrażenie regularne, ale o zmiennych zamiast treści. Jest to dopiero funkcja przyszłości która bo jest to na tyle złożony temat, że aby dobrze działała potrzeba poświęcić trochę więcej czasu nad nią. ### Na razie tylko wyrażenia jednowierszowe Łyżka dziegciu do miodu musi być, a tym jest że wyrażenia mogą być tylko jednowierszowe. Tworzenie całych bloków wyrażeń, tak jak w switch prawdopodobnie zostaną dodane w innej wersji PHP8, ale nie ma na tą chwilę żadnych szczegółowych terminów. Inspiracja artykułem: https://stitcher.io/blog/php-8-match-or-switch |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 556 Pomógł: 6314 Dołączył: 27.12.2004 ![]() |
Hm, ciekawie wyglada. Dzieki za info
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Coś podobnego (ale dużo bardziej zaawansowanego) jest w Swifcie (jako część specyfikacji switch). Języki w ogóle się do siebie coraz bardziej upodabniają.
W Swifcie też dobrze wymyślili, że switch domyślnie nie przechodzi do kolejnej opcji. W sumie to jak się zastanowić, zachowanie switch znane z PHP i wielu innych językach C-podobnych jest absurdalne. Dużo częściej wstawia się break niż korzysta z domyślnego zachowania, czyli jest to kiepski pomysł. W Swifcie zamiast tego jest słowo "fallthrough", które włącza zachowanie znane z C: Kod var zwierze = "Tygrys" switch zwierze { case "Tygrys", "Lew": print("Jestem tygrysem lub lwem") fallthrough case "Kot": print("Jestem kotem") case "Pies" : print("Jestem psem") default : print("Nie wiadomo kim jestem") } I tak, wartość Tygrys i Kot wypiszą zarówno "Jestem tygrysem lub lwem" i "Jestem kotem". Ma to o wiele więcej sensu niż wymaganie break wszędzie tam, gdzie nie chcemy iść dalej. Ten post edytował SmokAnalog 7.08.2020, 13:19:46 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 4 Dołączył: 30.05.2017 Ostrzeżenie: (0%) ![]() ![]() |
Małe, a cieszy.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 4.05.2025 - 09:39 |