function phpwtf(string $s) {
echo "$s\n";
}
phpwtf("Type hinting is da bomb");
Catchable fatal error: Argument 1 passé à phpwtf() doit être une instance de la chaîne, chaîne donnée
C'est plus qu'un peu Orwellien de voir PHP reconnaître et de rejeter le type souhaité dans le même souffle. Il y a cinq lumières, putain.
Quel est l'équivalent de type hinting pour les chaînes de caractères en PHP?
Bonus de l'examen de la réponse qui explique exactement ce qui se passe ici.
Résumé
Le message d'erreur est source de confusion pour une grande raison:
Type primitif noms ne sont pas réservés en PHP
Voici toutes les déclarations de classe:
class string { }
class int { }
class float { }
class double { }
Mon erreur a été de penser que le message d'erreur a été de me référant uniquement à la chaîne de type primitif, le mot "instance" devrait m'ont donné la pause. Un exemple pour illustrer plus loin:
class string { }
$n = 1234;
$s1 = (string)$n;
$s2 = new string();
$a = array('no', 'yes');
printf("\$s1 - primitive string? %s - string instance? %s\n",
$a[is_string($s1)], $a[is_a($s1, 'string')]);
printf("\$s2 - primitive string? %s - string instance? %s\n",
$a[is_string($s2)], $a[is_a($s2, 'string')]);
Sortie:
$s1 - primitif de la chaîne? oui - instance de chaîne? pas de
$s2 - primitif de la chaîne? pas de chaîne instance? oui
En PHP il est possible pour un string
un string
sauf quand c'est en fait un string
. Comme avec n'importe quel langage utilise implicite de conversion de type, le contexte est tout.