Ce n'est parce que PHP ne fait pas quelque chose que c'est mauvais

. C'est une autre philosophie, une autre approche.
Disons qu'au début, tu avais que des langages non typés. On s'est rendu compte que niveau sécurité, c'était pas ultra top, donc on est passé aux langages typés. On trouve
grosso modo trois familles : les types statiques, les types dynamiques et les types inférés. Chacun a une approche différente, des avantages et des inconvénients. Personnellement, j'ai un faible pour le typage inféré

. (Je laisse volontairement les types faibles et forts de côté).
Pour comparer rapidement les deux premiers (car ce sont ceux qui nous intéresses présentement), on pourrait dire que la différence est que pour un typage statique, le type porte sur la donnée, alors que pour un typage dynamique, le type porte le contenu de la donnée. Par exemple : en C, on écrirait
int x;, donc
x ne peut contenir que des entiers, alors qu'en PHP on écrirait
$x; et si
x contient un entier, alors il sera typé comme un entier. C'est dynamique, c'est connu à l'exécution.
Si les deux philosophies existent encore aujourd'hui, c'est qu'elles apportent chacune quelque chose. Il n'y a donc pas de mieux ou de moins bien, ça dépend du contexte d'utilisation. Et pour PHP, c'est très utile

.