I think the real problem is partial substitutability.
php's separation of the addition and concatenation operators increases the chance that a program will produce the right results despite accidental using the wrong type but it's still a minefield.
Java is statically typed. A caller can only pass your method the types it was expecting.
Python is dynamically typed but forbids use of the "+" operator on mixed strings and integers and will never compare a string an an integer as equal. So using an integer where a string was expected or vice-versa is likely to fail fast.