¿Por qué PHP Functions puede aceptar argumentos booleanos cuando solicita números enteros?

2 minutos de lectura

avatar de usuario
estudiante

Estaba leyendo en un libro de texto de WordPress donde encontré una descripción rápida de la siguiente función:

function is_super_admin( $user_id = false ) {...

Esta función determina si el usuario es un administrador del sitio.

Sin embargo, mi pregunta es sobre cómo PHP trata los parámetros.

La función anterior recibe un parámetro entero, y si no le pasa nada, le asignará un valor predeterminado de FALSE.

Aquí está mi pregunta:

FALSE es un BOOLEAN tipo de datos, y esta función debe aceptar un INTEGER tipo de datos.

Entonces, ¿cómo se puede permitir proporcionar un valor booleano, cuando deberíamos proporcionar un valor entero?

  • No estás declarando en ninguna parte que el parámetro es un intpor qué no debería ¿funciona?

    – deceze

    24 de julio de 2017 a las 8:50

  • PHP se escribe dinámicamente. Puede pasar argumentos de diferentes tipos, a menos que se indique específicamente lo contrario. En este caso particular, básicamente puedes pasar cualquier cosa.

    – Mjh

    24 de julio de 2017 a las 8:50

  • Leer más sobre tipo de malabares en PHP.

    – axiac

    24 de julio de 2017 a las 8:50

  • is_super_admin() es una función definida por el usuario en WordPress. Puede encontrar esta función en el archivo /wp-includes/capabilities.php. Los argumentos de la función PHP son de tipo dinámico, si no los declara como de tipo estricto. En este argumento de función $user_id es dinámico. $user_id puede aceptar cualquier tipo de tipo de datos.

    – Sumon Sarker

    24 de julio de 2017 a las 9:06


PHP 7 introdujo declaraciones de tipos escalares.

Vienen en dos sabores: coercitivo (predeterminado) y estricto. Ahora se pueden aplicar los siguientes tipos de parámetros (ya sea de forma coercitiva o estricta): cadenas (string), enteros (int), números de punto flotante (float) y booleanos (bool). Aumentan los otros tipos introducidos en PHP 5: nombres de clases, interfaces, arreglos e invocables.

la siguiente línea

function is_super_admin( $user_id = false ) { . . . .

no especifica el tipo del parámetro. Si fuera en cambio:

function is_super_admin( int $user_id = false ) { . . . .

entonces produciría un error.

Supongo que el valor predeterminado es falso, ya que es más fácil verificar un valor válido usando un simple if ya que tanto false como un int igual a 0 se evalúan como false.

Más sobre las nuevas características de PHP 7 aquí.

¿Ha sido útil esta solución?

¿Por qué PHP Functions puede aceptar argumentos booleanos cuando solicita números enteros?

2 minutos de lectura

avatar de usuario
estudiante

Estaba leyendo en un libro de texto de WordPress donde encontré una descripción rápida de la siguiente función:

function is_super_admin( $user_id = false ) {...

Esta función determina si el usuario es un administrador del sitio.

Sin embargo, mi pregunta es sobre cómo PHP trata los parámetros.

La función anterior recibe un parámetro entero, y si no le pasa nada, le asignará un valor predeterminado de FALSE.

Aquí está mi pregunta:

FALSE es un BOOLEAN tipo de datos, y esta función debe aceptar un INTEGER tipo de datos.

Entonces, ¿cómo se puede permitir proporcionar un valor booleano, cuando deberíamos proporcionar un valor entero?

  • No estás declarando en ninguna parte que el parámetro es un intpor qué no debería ¿funciona?

    – deceze

    24 de julio de 2017 a las 8:50

  • PHP se escribe dinámicamente. Puede pasar argumentos de diferentes tipos, a menos que se indique específicamente lo contrario. En este caso particular, básicamente puedes pasar cualquier cosa.

    – Mjh

    24 de julio de 2017 a las 8:50

  • Leer más sobre tipo de malabares en PHP.

    – axiac

    24 de julio de 2017 a las 8:50

  • is_super_admin() es una función definida por el usuario en WordPress. Puede encontrar esta función en el archivo /wp-includes/capabilities.php. Los argumentos de la función PHP son de tipo dinámico, si no los declara como de tipo estricto. En este argumento de función $user_id es dinámico. $user_id puede aceptar cualquier tipo de tipo de datos.

    – Sumon Sarker

    24 de julio de 2017 a las 9:06


PHP 7 introdujo declaraciones de tipos escalares.

Vienen en dos sabores: coercitivo (predeterminado) y estricto. Ahora se pueden aplicar los siguientes tipos de parámetros (ya sea de forma coercitiva o estricta): cadenas (string), enteros (int), números de punto flotante (float) y booleanos (bool). Aumentan los otros tipos introducidos en PHP 5: nombres de clases, interfaces, arreglos e invocables.

la siguiente línea

function is_super_admin( $user_id = false ) { . . . .

no especifica el tipo del parámetro. Si fuera en cambio:

function is_super_admin( int $user_id = false ) { . . . .

entonces produciría un error.

Supongo que el valor predeterminado es falso, ya que es más fácil verificar un valor válido usando un simple if ya que tanto false como un int igual a 0 se evalúan como false.

Más sobre las nuevas características de PHP 7 aquí.

¿Ha sido útil esta solución?