viking
22.02.2017, 17:55:18
Ja mam już jakieś zaćmienie po całym dniu czy coś z tym kodem jest nie tak? Testowane na 7.1.0.
function testReturn(string $test=null): ?string
{
return null;
}
Powinno sypnąć błędem i przyjąć jako wartość domyślną tylko stringa. Dopiero z definicją ?string $test=null akceptować też nulla.
nospor
22.02.2017, 18:12:42
Dales jako default null, temu to dziala.
string $test
teraz powinno sypnac bledem
viking
22.02.2017, 18:51:10
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ć.
nospor
22.02.2017, 18:56:23
Pewnie wyszli z zalozenia, ze skoro jako default dajesz null, to wiesz co robisz
viking
22.02.2017, 19:01:06
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ą.
Pyton_000
23.02.2017, 08:08:30
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.
viking
23.02.2017, 08:52:12
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.
Pyton_000
23.02.2017, 10:46:37
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.
viking
23.02.2017, 11:42:37
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.
Pyton_000
23.02.2017, 13:06:04
Pomyłka z Twojego kontekstu jest taką samą pomyłką jak wstawienie = do if zamiast ==/===.
viking
23.02.2017, 13:32:42
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.