is_true false cast bool php boolean default-value type-hinting

false - PHP: bool vs boolean type hinting



php cast object (1)

He estado tratando de usar tipografías más en PHP. Hoy estaba escribiendo una función que toma un booleano con un parámetro predeterminado y noté que una función de la forma

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

en realidad arroja un error fatal:

El valor predeterminado para los parámetros con una sugerencia de tipo de clase solo puede ser NULL

Mientras que una función de la forma similar

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

no. Sin embargo, ambos

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

dar exactamente la misma salida

: booleano falso

¿Por qué es esto? ¿Es esto similar a las clases de envoltorio en Java?


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

Advertencia
Los alias para los tipos escalares anteriores no son compatibles. En su lugar, se tratan como nombres de clase o interfaz. Por ejemplo, usar booleano como parámetro o tipo de retorno requerirá un argumento o valor de retorno que sea una instancia de la clase o interfaz booleano, en lugar de de tipo bool:

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

El ejemplo anterior dará como resultado:

Error fatal: Error de tipo no detectado: el argumento 1 pasado a test () debe ser una instancia de boolean, boolean dado

Así que en pocas palabras, boolean es un alias para bool , y los alias no funcionan en sugerencias de tipo.
Usa el nombre "real": bool

No hay similitud entre Type Hinting y Type Casting .

La sugerencia de tipo es algo así como que le está diciendo a su función qué tipo debe ser aceptado.

La conversión de tipos es "cambiar" entre tipos.

Los moldes permitidos son:

(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 el tipo de conversión php, tanto (bool) como (booleano) son iguales.