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.