73 votes

PHP: allusion bool vs boolean

J'ai essayé d'utiliser le type hinting plus en PHP. Aujourd'hui, j'ai écrit une fonction qui prend une valeur booléenne 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);
}

en fait renvoyait une erreur fatale:

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

Tandis qu'une fonction de la forme similaire

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

ne fait pas. Toutefois, les deux

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

donner exactement la même sortie

:boolean false

Pourquoi est-ce? Est-ce similaire à l'emballage des classes en Java?

93voto

Niet the Dark Absol Points 154811

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

Avertissement
Alias pour les types scalaires ne sont pas pris en charge. Au lieu de cela, ils sont traités comme de la classe ou de l'interface noms. Par exemple, en utilisant booléen en paramètre ou le type de retour nécessitera un argument ou la valeur de retour est un instanceof la classe ou de l'interface de type boolean, plutôt que de type bool:

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

L'exemple ci-dessus va afficher:

Fatal error: Uncaught TypeError: Argument 1 a test() doit être une instance de type boolean, boolean donné

Donc, en un mot, boolean est un alias pour bool, et les alias ne fonctionnent pas dans le type de conseils.
Utiliser le "vrai" nom: bool


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

Type hinting est quelque chose comme ce que vous dites est votre fonction dont le type doit être acceptée.

La conversion de Type est de "passage" entre les types.

La jette autorisées 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, la conversion de type deux (bool) et (boolean) sont les mêmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X