Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]PHP 7.1 wartość domyślna null a definicja typu
viking
post 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.

  1. function testReturn(string $test=null): ?string
  2. {
  3. return null;
  4. }
  5.  
  6. var_dump(testReturn(null));


Powinno sypnąć błędem i przyjąć jako wartość domyślną tylko stringa. Dopiero z definicją ?string $test=null akceptować też nulla.


--------------------
Go to the top of the page
+Quote Post
nospor
post 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 wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 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ć.


--------------------
Go to the top of the page
+Quote Post
nospor
post 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 wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 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ą.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 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.
Go to the top of the page
+Quote Post
viking
post 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


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 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.
Go to the top of the page
+Quote Post
viking
post 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.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 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 ==/===.
Go to the top of the page
+Quote Post
viking
post 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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 00:08