Php:ssä voi pakottaa funktion parametrien tyypin, jos tyyppi on joko array tai jonkin luokan olio. Muut tyypit ohitetaan.
Kuinka väärin / huono tapa on tehdä esim seuraavaa:
public function getPerson(string $name) {...}
Erittäin huono tapa:
$ php -a Interactive shell php > function testi(string $s) { echo $s, "\n"; } php > testi("moi"); Catchable fatal error: Argument 1 passed to testi() must be an instance of string, string given, called in php shell code on line 1 and defined in php shell code on line 1 Call Stack: 17.4932 640576 1. {main}() php shell code:0 17.4932 640712 2. testi() php shell code:1
Koska parametrin tyypin on oltava luokka tai array, PHP olettaa, että string tarkoittaa tässä yhteydessä omaa luokkaasi. (Toisin sanoen "muita tyyppejä" ei suinkaan ohiteta.) Ja totta tosiaan: voit luoda string-nimisen luokan ja välittää sitä edustavan olion parametrina funktiolle. Harmi vain, ettei sillä luokalla voi korvata PHP:n sisäistä string-tietotyyppiä.
Edit: Virheilmoituksen kohta "must be an instance of string, string given" saattaa näyttää aika kummalliselta, mutta asiaa valottaa jonkin verran se, että jos funktiolle antaa väärälaisen olion, ilmoituksessa on yksi instance of enemmän: "must be an instance of X, instance of Y given". Toisin sanoen teksti on tyypiltään string mutta string-luokan olio olisi tyypiltään instance of string.
Aihe on jo aika vanha, joten et voi enää vastata siihen.