Man kann Funktionsparametern keinen type hint für einfache (skalare) Typen mitgeben [...]
Ja, leider - obwohl manche Funktionen als Parameter "string" erwarten, casten sie dann seltsamerweise nicht automatisch in diesen Typ.
Das ist z.B. bei mktime() und date() interessant: beide akzeptieren den Timestamp lediglich als int. Während mktime() brav castet tut es date() nicht.
Unter der Annahme timestamp und year sind jeweils Objekte mit strings als Inhalt:
date('c', $xml->foo[0]->timestamp); //funktioniert nicht
mktime(0, 0, 0, 0, 0, $xml->foo[0]->year); // funktioniert
Dass es bei Funktionen die "mixed" akzeptieren nicht funktioniert ist da verständlicher.