動的言語、例えばPHPで、文字列の前にプレフィックスをつけて返す関数があったとして、

function add_prefix($str) {
 return 'prefix_' . $str;
}

これを
$res = add_prefix('hoge'); // 引数が文字列
と 呼ぼうが、
$res = add_prefix(100); // 引数が数値
と呼ぼうが

PHP的には間違いじゃないんだよ。むしろ、この融通性が動的言語のメリットとも言える。

引数が誤ったものかどうかは、呼び出し側のコンテキストによるが、それを見逃すリスクと
利便性を計りにかけて、利便性をとったのが動的言語といえる。この利便性のおかげで
コード量が減りバグが混在するリスクを減らし、生産性を高めている。

むろん、コーディングする側は、型指定がないことのリスクを認識した上でコーディング
する必要があるが、それに十分見合うだけの利益を享受している。

もし、引数として数値を認めたくない場合は、関数内にassert文なり、型チェックのコード
をいれとくさ。