web-dev-qa-db-fra.com

PHP: allusion bool vs boolean

J'ai essayé d'utiliser plus du texte en PHP. Aujourd’hui, j’écrivais une fonction qui prend un booléen avec un paramètre par défaut et j’ai remarqué qu’une fonction de la forme

function foo(boolean $bar = false) {
    var_dump($bar);
}

jette réellement une erreur fatale:

La valeur par défaut pour les paramètres avec un indice de type de classe ne peut être que NULL

Bien que fonction de la forme similaire

function foo(bool $bar = false) {
    var_dump($bar);
}

ne fait pas. Cependant, les deux

var_dump((bool) $bar);
var_dump((boolean) $bar);

donner exactement le même résultat

: booléen faux

Pourquoi est-ce? Est-ce similaire aux classes wrapper en Java?

43
Jimmy P

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

Avertissement
Les alias des types scalaires ci-dessus ne sont pas pris en charge. Au lieu de cela, ils sont traités comme des noms de classe ou d'interface. Par exemple, utiliser boolean comme paramètre ou type de retour nécessitera un argument ou une valeur de retour qui est une instance de la classe ou de l'interface boolean, plutôt que du type bool:

<?php
function test(boolean $param) {}
test(true);
?>

L'exemple ci-dessus affichera:

Erreur fatale: Uncaught TypeError: L'argument 1 passé à test () doit être une instance de boolean, boolean étant donné.

En résumé, boolean est un alias pour bool, et les alias ne fonctionnent pas dans les indicateurs de type.
Utilisez le "vrai" nom: bool


Il n'y a pas de similitude entre Type Hinting et Type Casting .

Allusion de type est quelque chose comme ça, vous dites à votre fonction quel type doit être accepté.

Type casting signifie "basculer" entre les types.

Les moulages autorisés sont:

(int), (integer) - cast to integer
(bool), (boolean) - cast to boolean
(float), (double), (real) - cast to float
(string) - cast to string
(array) - cast to array
(object) - cast to object
(unset) - cast to NULL (PHP 5)

En php tapez casting (bool) et (boolean) sont identiques.

55