[PHP]PHP 7.1 wartość domyślna null a definicja typu |
[PHP]PHP 7.1 wartość domyślna null a definicja typu |
22.02.2017, 17:55:18
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Ja mam już jakieś zaćmienie po całym dniu czy coś z tym kodem jest nie tak? Testowane na 7.1.0.
Powinno sypnąć błędem i przyjąć jako wartość domyślną tylko stringa. Dopiero z definicją ?string $test=null akceptować też nulla. -------------------- |
|
|
22.02.2017, 18:12:42
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Dales jako default null, temu to dziala.
string $test teraz powinno sypnac bledem -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.02.2017, 18:51:10
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Niby tak, jest w dokumentacji funkcji że null w definicji dodaje możliwość wpisywania nulla, ale zaczynając od 7.1 i operatora ? jest to głupota i łamanie zasad type hintingu. Kolejne niepotrzebne odstępstwo od reguły na którym się można przejechać.
-------------------- |
|
|
22.02.2017, 18:56:23
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Pewnie wyszli z zalozenia, ze skoro jako default dajesz null, to wiesz co robisz
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.02.2017, 19:01:06
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Tiaa... Mam odpowiedź.
Had nullable types been ready for 7.0 then maybe "string $x=null" would not have been allowed. But it was not, and since scalar type declarations was, there needed to be some way to use the declarations but still permit null as a default (as it is a standard convention). =null was how that happened. "string $x=null" will not be confined to only the 7.0 series. That would create chaos. It may be deprecated and removed at some point in the future, but that is not on the radar. Pospieszyli się z wydaniem 7.0 i teraz smród będzie się ciągnął przez niewiadomo ile wersji. A już liczyłem że PHP wychodzi na prostą. -------------------- |
|
|
23.02.2017, 08:08:30
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Nie przesadzaj. Robisz problem tam gdzie go nie ma. Skoro dajesz default w postaci null to znaczy że takową opcję przyjmujesz do ciała metody i ją obsługujesz. Jeśli nie chcesz pozwolić na null to wywal default i po problemie.
|
|
|
23.02.2017, 08:52:12
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
To po co wtedy całe typowanie skoro i tak nie ma znaczenia? Przy declare(strict_types=1); taka sytuacja nie powinna mieć miejsca. Celem jest w końcu zabezpieczenie przed błędami programistów. String to jeszcze nie problem ale object? Nagle mogą pojawić się błędy call to ... on null.
Ten post edytował viking 23.02.2017, 09:00:01 -------------------- |
|
|
23.02.2017, 10:46:37
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Skoro pozwalasz na przekazanie null w parametrze to musisz się z nim liczyć. Dla mnie nie ma tu nic dziwnego. Jest to nawet logiczne. Z obiektem przecież tak samo. Skoro dajesz default null to przecież nie będziesz wykonywał operacji na null. Jak nie chcesz null to nie stosuj default.
|
|
|
23.02.2017, 11:42:37
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
A czy ja mówiłem że zezwalam? Programista miał gorszy dzień, natłok zajęć i pomylił się, z rozpędu wpisał w kodzie jako wartość domyślną null chociaż powinien być string/int cokolwiek. Inny programista nie zauważył, przekazał z bazy null i błędy się nawarstwiają. To jest logiczne? Ta wartość domyślna ustawiona na null zgodnie z dokumentacją:
"The declaration can be made to accept NULL values if the default value of the parameter is set to NULL" wynika tylko i wyłącznie z ograniczeń PHP przed wersją 7.1. Śpieszyli się tak bardzo z wydaniem 7.0 że nie zapewnili podstawowych możliwości - nullable type, void. -------------------- |
|
|
23.02.2017, 13:06:04
Post
#10
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Pomyłka z Twojego kontekstu jest taką samą pomyłką jak wstawienie = do if zamiast ==/===.
|
|
|
23.02.2017, 13:32:42
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Oprócz też że przy strict_types php dla wszystkich innych wartości oprócz nulla sypnie wyjątkiem. Tutaj, zamiast krzyknąć "hola, hola, miał być typ x jest null", łyknie jak Polacy pączki.
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 00:08 |