Przepraszam, czy to jest praca naukowa?? Nawet nie jest podpisany z imienia i nazwiska autora.
To jest jakiś artykuł blogera- dlaczego to ma być wykładnia?
Świat nie kończy się na pracach naukowych.
To spisane argumenty, które składają się na obiegowa opinię "LOLPHP" - pytałeś o przykłady, nie o pracę naukową.
To, czy się z tym zgadzasz, czy nie, to Twoja sprawa. Ale dostałeś to o co pytałeś, więc bez kręcenia nosem, bo aż się prosi o przechodzenie do niezbyt przyjemnych analiz ("o, jest bardzo przywiązany do PHP i każdą krytykę tego języka będzie w jakiś sposób oddalał, zamiast zaakceptować, że dziwadełka w tym języku to nic innego, niż dziwadełka").
PHP to zwykły język skryptowy bez twardego typowania do stronek www na bacendzie. Tylko tyle i aż tyle
1. Nie znam terminu "twarde typowanie".
Znam kilka ortogonalnych (
niezależnych lub słabo zależnych od siebie) typowania:
- Statyczne vs. dynamiczne (compile-time vs. runtime).
- Silne vs. słabe ("dzikie" implicite casty lub ich brak).
- Deklaratywne vs. duck-typing.
https://en.wikipedia.org/wiki/Strong_and_weak_typinghttps://en.wikipedia.org/wiki/Type_system#Type_checkingTak, to jest temat rzeka, ale właśnie te subtelne różnice powodują, że w różnych tzw. skryptowych językach programowania z typowaniem
dynamicznym efekty są diametralnie inne:
- Python - Generalnie czysty,
silny system typowania, z widoczną preferencją ducktypingu.
- Javascript - Zawiera trochę
dziwadełek słabego typowania*, ale generalnie da się żyć.
- Perl - Uwaga na kontekst/sigile (rozróżnienie typów skalarnych/listowych/mapowych) - można by to uznać nawet za typowanie bardziej statyczne, niż w pozostałych wymienionych tu językach, jednak do tej konwencji trzeba się przyzwyczaić. W ramach skalarów - kilka dziwadełek, jak konwersja string<->liczba w zależności od użytych operatorów (ale to znów można traktować jako coś bardziej statycznego), więc jedyny rodzaj dziwadełek porównywalnych z pozostałymi językami tutaj to traktowanie stringa "0" jako wartość fałszywą (każdy inny niepusty string - mp. "00" - będzie prawdziwy).
- Shell (rodzina sh) - stringly-typed - AFAIK wszystkie zmienne skalarne to stringi, obliczenia matematyczne wykonuje się przez wejście do specjalnego trybu, wynik przy podstawieniu do komendy luv zapisaniu do zmiennej znów jest konwertowany na string.
- PHP - mnóstwo dziwadełek słabego typowania - dopóki porównując stringa z intem string jest konwertowany na inta i potem oba są porównywane, to jest jeszcze OK. Ale jeśli przy porównywaniu 2 stringów czy innych 2 wartości
tego samego typu, w wypadku niepowodzenia podstawowego porównania obie wartości są konwertowane do zupełnie innego typu (niezwiązanego z
żadną z wartości), to robi się bardzo
nieintuicyjnie.
Takie rzeczy
są potem raportowane jako bugi w języku, na co developerze odpowiadają, że przecież jest operator === - mój "ulubiony" kontrargument. No to ja pytam - po co w takim razie istnieje operator ==? IMHO jest na tyle nieprzewidywalny, że lepiej go unikać, a gdyby go usunąć z języka i przepisać kod używający go w sposób explicite mówiący, jaki jest cel porównania - usunęłoby się sporo błędów,
w tym potencjalnych błędów bezpieczeństwa (no dobra, opieranie bezpieczeństwa na MD5 to i tak nienajlepszy pomysł, ale to z innych względów).
* Przy czym kilka z tych wymienionych w filmiku to tak naprawdę dziwadełka parsera/składni, a nie systemu typów - te zaczynające się od "{} + "
2. Co to jest "typownie na backendzie"? o_O