With the == vs === thing, I think you're confusing dynamic typing with weak typing. Weak typing is why == and === exist, and it totally sucks.
>I'm looking at a function parameter in a random file. How do I even begin to work with it?
First off, Duck Typing: The type of the parameter is the intersection of the types the functions it is called with contain.
Secondly, this is why you document your code and choose prescriptive variable names. Honestly, this is pretty bad even with types (the first question I had when I looked at my first chunk of real world C was, "what the hell is the variable 'int rv;', and what's it being used for?).
Even I'll admit that type annotations can be useful sometimes, but I don't need them.